Der schnellste Weg, MySQL-Datenbanken mit Mysqldump auf einen anderen Server zu migrieren

Die Migration einer MySQL-Datenbank auf einen anderen Server kann eine Herausforderung sein, insbesondere wenn du auf minimale Ausfallzeit und hohe Leistung abzielst.

Eines der beliebtesten Werkzeuge für diese Aufgabe ist mysqldump, ein von MySQL bereitgestelltes Dienstprogramm zum Sichern und Wiederherstellen von Datenbanken. In diesem Artikel zeigen wir dir, wie du mysqldump verwendest, um deine Datenbank zu migrieren, und wie du ein Skript erstellst, um den Prozess zu automatisieren.

MySQL-Datenbanken auf einen anderen Server migrieren und die Daten klonen.

Voraussetzungen

  • Quell- und Zielserver mit installiertem MySQL
  • MySQL-Root-Zugangsdaten oder ein Konto mit ausreichenden Berechtigungen auf beiden Servern
  • SSH-Zugang zu beiden Servern oder der DB-Server muss eingehende Verbindungen zulassen (sofern nicht auf demselben Rechner)

Datenbank mit mysqldump exportieren

Der erste Schritt im Migrationsprozess besteht darin, ein Backup der Quelldatenbank zu erstellen. Wir verwenden dafür mysqldump. Mysqldump erstellt ein SQL-Skript, das alle notwendigen Befehle enthält, um die Datenbankstruktur und die Daten auf dem Zielserver wiederherzustellen.

Logge dich am Quellserver ein und führe den folgenden Befehl aus, um ein komprimiertes Backup deiner Datenbank zu erstellen:

bash
mysqldump -u [username] -p --single-transaction --extended-insert --quick --lock-tables=false [database_name] | gzip > [backup_file].sql.gz

Ersetze [username], [database_name] und [backup_file] durch deinen MySQL-Benutzernamen, den Namen der Datenbank, die du migrieren möchtest, bzw. den gewünschten Namen der Backup-Datei.

Dieser Befehl verwendet das Flag --single-transaction, um die Datenkonsistenz sicherzustellen, --quick zur Reduzierung des Speicherverbrauchs und –lock-tables=false, um Tabellen während des Exportvorgangs nicht zu sperren.

Der wichtigste Parameter ist –extended-insert. Damit wird der Import der exportierten SQL-Datei auf dem Zielserver 10- bis 15-mal schneller.

Backup-Datei auf den Zielserver übertragen

Nachdem das Backup erstellt wurde, kannst du es in den anderen Datenbankserver importieren.

  • Kopiere die komprimierte gzip-Datei auf den Server und importiere sie
  • Entpacke die Datei und lade sie per SSH mit MySQL in den DB-Server

Um sie auf den Zielserver zu übertragen, kannst du ein Tool wie SCP, SFTP oder rsync verwenden. Zum Beispiel mit SCP:

bash
scp [backup_file].sql.gz [destination_user]@[destination_ip]:/path/to/destination

Ersetze [backup_file], [destination_user], [destination_ip] und /path/to/destination durch die entsprechenden Werte.

Datenbank auf dem Zielserver importieren

Sobald die Backup-Datei übertragen ist, logge dich am Zielserver ein und führe den folgenden Befehl aus, um die Datenbank zu importieren:

bash
gunzip < [backup_file].sql.gz | mysql -u [username] -p [database_name]

Ersetze [username], [database_name] und [backup_file] durch deinen MySQL-Benutzernamen, den Namen der Datenbank, die du migrieren möchtest, bzw. den Namen der Backup-Datei.

Datenbankmigrations-Skript herunterladen

Um den MySQL-Datenbankmigrationsprozess zu automatisieren, kannst du dieses Bash-Skript verwenden, das wir hier auf wp-staging.com eingesetzt haben, um unsere Datenbank in eine bei DigitalOcean gehostete managed DB zu migrieren. (Es wird nicht mehr verwendet, da WP Staging nun die Datenbankmigration übernehmen kann):

bash
#!/bin/sh
# migrate.sh

sourceUser=""
sourcePassword=""
sourceHostname=""
sourcePort=""
sourceDatabase=""

destinationUser=""
destinationPassword=""
destinationHostname=""
destinationPort=""
destinationDatabase=""

echo "Exporting $sourceDatabase database to ./wp-staging.com.sql"

start_export=`date +%s`

mysqldump -P $sourcePort -h $sourceHostname -u $sourceUser  -p$sourcePassword --set-gtid-purged=OFF --extended-insert --single-transaction --skip-lock-tables --column-statistics=0 $sourceDatabase > ./wp-staging.com.sql

# Done creating a dump of wp-staging.com

end_export=`date +%s`

echo "Database exported in" $((end_export-start_export)) "seconds"

echo "Importing Database to... "

start_import=`date +%s`

mysql -u $destinationUser -p$destinationPassword -h $destinationHostname -P $destinationPort $destinationDatabase < ./wp-staging.com.sql

# Done importing the dump to managed db

end_import=`date +%s`

echo "Database imported in" $((end_import-start_import)) "seconds"

echo "Total runtime: " $((end_export-start_export+end_import-start_import)) "seconds"

Ersetze die Werte der Datenbank-Zugangsdaten am Anfang der Datei durch die passenden Informationen für deine Quell- und Zieldatenbanken.

Stelle vor dem Ausführen des Skripts sicher, dass Quell- und Zieldatenbanken erreichbar sind.

Gib dem Skript anschließend Ausführungsrechte:

bash
chmod +x migrate.sh

Führe das Skript aus, um die Migration durchzuführen:

bash
./migrate.sh

Dieses Skript exportiert die Quelldatenbank mit mysqldump, importiert die Datenbank auf den Zielserver mit dem mysql-Befehl und räumt anschließend auf, indem es die Backup-Datei entfernt.

Verwandte Artikel

Rene Hermenau

Autor: Rene Hermenau

Über den Autor: René Hermenau ist Gründer von WP STAGING. Er arbeitet an WordPress-Backups, Staging, Migrationen, Datenbankverarbeitung und sicheren Deployment-Workflows.