2008-09-02 14 views
6

Ich habe eine ziemlich kleine MySQL-Datenbank (eine Textpattern-Installation) auf einem Server, auf den ich keinen SSH-Zugriff habe (ich habe nur FTP-Zugriff). Ich muss die Live-Datenbank regelmäßig auf meinen lokalen Dev-Server herunterladen. Ich möchte entweder ein Skript ausführen und/oder einen Cron-Job ausführen lassen. Was sind einige gute Möglichkeiten, dies zu tun?Wie lade ich eine Live-MySQL-Datenbank in eine lokale Test-Datenbank auf Anforderung, ohne SSH?

einige Punkte zu beachten:

  • Live-Server läuft Linux, Apache 2.2, PHP 5.2 und MySQL 4.1
  • Local Server die gleiche läuft (so mit PHP ist eine Option), aber das OS Windows ist
  • Local Server Ruby on hat (so mit Ruby ist eine gültige Option)
  • Die Live MySQL db kann akzeptieren Remote-Verbindungen von verschiedenen IPs
  • Ich kann nicht die Replikation auf dem Remote-Server aktivieren

Update: Ich habe BlaM die akzeptierte Antwort; es ist schön einfach. Ich kann nicht glauben, dass ich nicht daran gedacht habe. Es gab jedoch ein Problem: Ich wollte den Prozess automatisieren, aber die vorgeschlagene Lösung fordert den Benutzer zur Eingabe eines Passworts auf. Hier ist eine leicht modifizierte Version des mysqldump-Befehl, der in dem Kennwort passiert:

mysqldump -u USER --password=MYPASSWORD DATABASE_TO_DUMP -h HOST > backup.sql

Antwort

5

Da Sie remote auf Ihre Datenbank zugreifen können, können Sie mysqldump von Ihrem Windows-Computer zum Abrufen der entfernten Datenbank verwenden. Von Kommandozeile:

cd "into mysql directory" 
mysqldump -u USERNAME -p -h YOUR_HOST_IP DATABASE_TO_MIRROR >c:\backup\database.sql 

Das Programm wird Sie für die Datenbank Passwort fragen und dann eine Datei c erzeugen: \ backup \ database.sql, die Sie auf Ihrem Windows-Rechner ausführen können die Daten einzufügen.

Mit einer kleinen Datenbank, die ziemlich schnell sein sollte.

1

Ist MySQL-Replikation eine Option? Sie könnten es sogar ein- und ausschalten, wenn Sie nicht möchten, dass es ständig repliziert.

Dies war ein good article auf Replikation.

0

Ich würde ein (Ruby) Skript erstellen, um eine SELECT * FROM ... auf allen Datenbanken auf dem Server zu tun und dann eine DROP DATABASE ... gefolgt von einer Reihe von neuen INSERT s auf der lokalen Kopie. Sie können eine SHOW DATABASES Abfrage ausführen, um die Datenbanken dynamisch aufzulisten. Nun wird davon ausgegangen, dass sich die Tabellenstruktur nicht ändert. Wenn Sie jedoch auch Tabellenänderungen unterstützen möchten, können Sie eine SHOW CREATE TABLE ... Abfrage und eine entsprechende CREATE TABLE Anweisung für jede Tabelle in jeder Datenbank hinzufügen. Um eine Liste aller Tabellen in einer Datenbank zu erhalten, führen Sie eine SHOW TABLES Abfrage durch.

Sobald Sie das Skript haben, können Sie es so einrichten, dass ein geplanter Job so oft ausgeführt wird, wie Sie möchten.

0

@ Mark Biek

Ist MySQL-Replikation eine Option? Sie könnten es sogar ein- und ausschalten, wenn Sie nicht möchten, dass es ständig repliziert.

Danke für den Vorschlag, aber ich kann die Replikation auf dem Server nicht aktivieren. Es ist ein gemeinsamer Server mit sehr wenig Spielraum. Ich habe die Frage aktualisiert, um dies zu beachten.

0

Je nachdem, wie oft Sie Live-Daten kopieren müssen und wie schnell Sie dies tun müssen, kann die Installation phpMyAdmin auf beiden Computern eine Option sein. Sie können DBs exportieren und importieren, aber Sie müssen es manuell tun. Wenn es eine kleine DB ist (und es klingt wie es ist), und Sie brauchen nicht Live-Daten kopiert zu oft, es könnte gut funktionieren für das, was Sie brauchen.

2

Hier ist, was ich benutze. Dadurch wird die Datenbank vom Live-Server heruntergeladen, während sie auf den lokalen Server hochgeladen wird. mysqldump -hlive_server_addresss -ulive_server_user -plive_server_password --opt --compress live_server_db | mysql -ulocal_server_user -plocal_server_password local_server_db

Sie können dies von einer Datei bat ausführen. Sie können eine geplante Aufgabe verwenden.