it-swarm.com.de

So duplizieren Sie eine MySQL-Datenbank auf demselben Server

Ich habe eine große MySQL-Datenbank, nennen wir es live_db, das ich auf demselben Computer replizieren möchte, um ein Testsystem zum Herumspielen bereitzustellen (test_db), einschließlich Tabellenstruktur und Daten. In regelmäßigen Abständen möchte ich die test_db mit dem Inhalt der live_db; wenn möglich inkrementell.

Gibt es einen eingebauten Mechanismus in MySQL, um das zu tun? Ich denke, dass Master-Slave-Replikation nicht das ist, was ich will, da es möglich sein sollte, Daten in der test_db. Diese Änderungen müssen jedoch nicht beibehalten werden.

Grüße,

CGD

Der Befehlszeilenclient mysql akzeptiert einen Stream von SQL-Anweisungen von der Standardeingabe. Sie können daher die Ausgabe von mysqldump direkt in mysql in der Befehlszeile umleiten. Wenn Sie dies als Cron-Job ausführen, werden Ihre Testdaten regelmäßig mit aktualisierten Live-Daten überschrieben:

mysql --user=username --password=passwd -e 'DROP DATABASE test_db;'
mysql --user=username --password=passwd -e 'CREATE DATABASE test_db;'
mysqldump --user=username --password=passwd live_db | mysql --user=username --password=passwd test_db

Beachten Sie, dass Ihre Daten sehr umfangreich sind und daher viel Zeit in Anspruch nehmen.

72

Michaels Antwort oben funktioniert gut, kopiert jedoch keine Ereignisse, gespeicherten Prozeduren oder Trigger.

Um diese zu kopieren, werden für mysqldump ein paar weitere Schalter benötigt: --events --triggers --routines

Als Ergänzung zu einer bereits erstellten Kopie:

mysqldump --user=username --password=passwd --no-data --no-create-info --no-create-db --events --triggers --routines live_db | mysql --user=username --password=passwd test_db

6
Samuel Åslund

Für alle Mac-Benutzer müssen Sie mit sequel pro nur zur Datenbank (Menü) -> Datenbank duplizieren gehen. Erledigt!

0
Priyank

Das Problem mit MySQLdump ist, dass die Live-Datenbank während des Dumps entweder unbrauchbar ist, sehr umständlich zu verwenden ist oder die Sicherung nicht konsistent ist. Es sei denn, Sie haben ein ausreichend großes Zeitfenster, in dem die Unbrauchbarkeit der Live-Datenbank nicht wichtig ist, da die Datenbank ohnehin nicht verwendet werden muss (zum Beispiel spät in der Nacht).

Eine andere Möglichkeit, wenn Sie Speicherplatz zur Verfügung haben - und heutzutage sind 20 GB nicht mehr so ​​viel -, ist die Verwendung einer zusätzlichen Datenbank.

Sie können eine zweite Kopie von MySQL Server auf einem anderen Port installieren, und es muss der Slave sein. Dann haben Sie zwei identische Datenbanken (Live-Master, Live-Slave).

Wenn Sie die Testdatenbank klonen müssen, stoppen Sie die Slave-Replikation - der Live-Slave bleibt jetzt in der Zeit "eingefroren" - und sichern Sie den Live-Slave in der Test-Datenbank, indem Sie MySQLbackup verwenden oder einfach die Datendateien kopieren. Anschließend starten Sie die Replikation neu.

Die Auswirkungen auf den Live-Master sind vernachlässigbar, und der Slave kann tatsächlich für nicht aktualisierungskritische Auswahlen verwendet werden.

0
LSerni

Wenn Sie MySQL Migration Toolkit bevorzugen, können Sie im Schritt Datenzuordnung auf den Schemanamen doppelklicken und den Namen des Zielschemas ändern.

0
Vasili