it-swarm.com.de

Können Sie automatisch eine mysqldump-Datei erstellen, die keine Fremdschlüsseleinschränkungen erzwingt?

Wenn ich einen mysqldump-Befehl für meine Datenbank ausführe und dann versuche, sie zu importieren, schlägt der Versuch fehl, die Tabellen alphabetisch zu erstellen, obwohl sie möglicherweise einen Fremdschlüssel haben, der später in der Datei auf eine Tabelle verweist. Es scheint nichts in der Dokumentation zu geben und ich habe Antworten gefunden wie das die sagen, dass die Datei nach der Erstellung aktualisiert werden soll, nachdem sie erstellt wurde:

set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;

Gibt es keine Möglichkeit, diese Zeilen automatisch festzulegen oder die Tabellen in der erforderlichen Reihenfolge zu exportieren (ohne alle Tabellennamen manuell angeben zu müssen, da dies mühsam und fehleranfällig sein kann)? Ich konnte diese Zeilen in ein Skript einfassen, fragte mich aber, ob es eine einfache Möglichkeit gibt, eine Datei zu sichern und sie dann ohne manuelle Aktualisierung zu importieren.

40
Tai Squared

Der Befehl mysqldump, der in MySQL 5.0.51 enthalten ist (und gemäß den Änderungsprotokollversionen seit 4.1.1 ), schaltet die Fremdschlüsselprüfung aus. Standardmäßig enthält mysqldump die folgende Zeile oben in der Speicherauszugsdatei:

/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

Die /*!40014 ... */-Syntax ist ein bedingter Kommentar , der unter MySQL 4.0.14 und höher ausgeführt wird. Die alte Einstellung der Fremdschlüsselüberprüfung wird am Ende der Speicherauszugsdatei wiederhergestellt:

/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
44
Phil Ross

Achtung . Aus irgendeinem Grund schreibt mysqldump nicht FOREIGN_KEY_CHECKS = 0, wenn die Option --compact verwendet wird.

Ciao.

30
edtruant

Wenn Sie beim Export von SQL phpMyAdmin verwenden, wählen Sie Benutzerdefinierte Exportmethode . Klicken Sie anschließend unter den Kontrollkästchen-Optionen auf " Fremdschlüsselprüfung deaktivieren ". Mit der exportierten SQL-Anweisung werden Fremdschlüsselprüfungen am Anfang und am Ende der Ausgabedatei deaktiviert bzw. aktiviert. 

Es ist nicht "automatisch", aber Sie müssen die Anweisungen nicht für jeden Export selbst schreiben. 

11
alds

Dies kann passieren, wenn Sie --compact als einen Ihrer mysqldump-Befehle verwenden. --compact enthält --skip-comments, daher sollte --compact--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset verwendet werden.

8
iRonin

Hüten Sie sich vor Ihrem MySQL-Client, den Sie verwenden, mit dem Befehl mysql kein Problem. Dumping:

% mysqldump -u ocp6 -pocp6 ocp6 --single-transaction --result-file=dump.sql 

Wiederherstellen:

% mysql -u ocp6 -pocp6 ocp6 < dump.sql

Alles ist gut.

Mit einem anderen MySQL-Client ( mycli in meiner Situation) können Sie die Dump-Datei wiederherstellen

mysql [email protected]:(none)> \. dump.sql
[…]
(1005, 'Can\'t create table `ocp6`.`composition` (errno: 150 "Foreign key constraint is incorrectly formed")')

Ich gehe davon aus, dass myclibedingte Kommentare nicht verstehen.

1
freezed