MySQL-Datenbanken mit mysqldump kopieren
Als Datenbankadministrator wird man oft mit dem Problem konfrontiert, Datenbanken auf einen andere Server kopieren zu müssen. Ein sehr praktisches Tool ist hierbei unter anderem mysqldump.
Beispiele:
Dieser Befehl setzt vorraus dass die DATENBANK noch nicht auf dem ZIELSERVER vorhanden ist. Der Parameter --force bewirkt dass der Export auch bei etwaigen Fehlern durchgeführt wird.
Möchte man weitere Datenbanken exportieren, so braucht man nur dessen Namen an den Parameter --databases anzuhängen.
1 | mysqldump --force --databases DATENBANK DATENBANK2 DATENBANK3 | mysql -uBENUTZERNAME -pPASSWORT -hZIELSERVER |
Möchte man eine vorhanden Datenbank ersetzen, so kann der Parameter --add-drop-database hinzugefügt werden. Der Befehl sieht dann so aus:
1 | mysqldump --force --add-drop-database --databases DATENBANK | mysql -uBENUTZERNAME -pPASSWORT -hZIELSERVER |
INNODB:
Auch Datenbanken, die INNODB Tabellen enthalten, können mit mysqldump exportiert werden. Hier kann es aber unter umständen zu folgendem Fehler kommen, wenn man Foreign Key Constraints, auch Fremdschlüssel Beschränkungen genannt, arbeitet.
1 | Cannot delete or update a parent row: a foreign key constraint fails |
Dies liegt an der Funktionsweise von mysqldump. Die Tabellen werden ohne logischen Zusammenhang, in alphabetischer Reihenfolge exportiert.
Hat Tabelle A eine Fremdschlüsselspalte die auf Tabelle B zeigt, so wird beim Import von Tabelle A ein Fehler auftreten, da Tabelle B erst zu einem späteren Zeitpunkt importiert werden wird; dies natürlich nur falls Fremdschlüssel-Constraints vorhanden sind.
Um dieses Problem zu umgehen bietet es sich an die Fremdschlüssel Überprüfung, beim Kopieren der Datenbank, kurzzeitig zu deaktivieren. Hier ein Beispiel:
1 | (echo "SET FOREIGN_KEY_CHECKS=0;" && mysqldump --force --add-drop-database --databases DATENBANK) | mysql -uBENUTZERNAME -pPASSWORT -hZIELSERVER |
Solltet Ihr weitere Fragen haben, so werft Ihr am besten einen Blick in die Online Dokumentation, oder aber Ihr schreibt mir, und ich werde weiter auf das Thema eingehen.
[...] einem meiner vorigen Beiträge habe ich beschrieben, wie man MySQL-Datenbanken mit mysqldump kopieren [...]