PHP & MySQL Engineering

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:

1
mysqldump --force --databases DATENBANK | mysql -uBENUTZERNAME -pPASSWORT -hZIELSERVER

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.

 

Kommentare: 1

Kommentar hinterlassen »

 
 
 

[...] einem meiner vorigen Beiträge habe ich beschrieben, wie man MySQL-Datenbanken mit mysqldump kopieren [...]

 
 

Kommentar hinterlassen

 
(Wird nicht veröffentlicht)
 
(rel="follow")
 
Kommentar *
 
Drei + Acht =