Können Sie automatisch eine MySQLDump -Datei erstellen, die keine ausländischen Schlüsselbeschränkungen durchsetzt?

StackOverflow https://stackoverflow.com/questions/2429655

Frage

Wenn ich einen MySQLDump -Befehl in meiner Datenbank ausführe und dann versuche, ihn zu importieren, scheitert er, da es versucht, die Tabellen alphabetisch zu erstellen, obwohl sie möglicherweise einen Fremdschlüssel haben, der eine Tabelle später in der Datei verweist. Es scheint nichts in der Dokumentation Und ich habe Antworten wie gefunden wie Dies Das heißt, die Datei zu aktualisieren, nachdem sie erstellt wurde, um zu beinhalten:

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 anzugeben, da dies mühsam und fehleranfällig sein kann)? Ich könnte diese Zeilen in ein Skript einwickeln, fragte mich aber, ob es eine einfache Möglichkeit gibt, sicherzustellen, dass ich eine Datei abwerfen und sie dann importieren kann, ohne sie manuell zu aktualisieren.

War es hilfreich?

Lösung

Das mysqldump Befehl mit MySQL seit der Version enthalten 4.1.1 Standardmäßig erzeugt ein Skript, das die fremden Schlüsselprüfungen ausschaltet. Die folgende Zeile befindet sich ganz oben in der Dump -Datei:

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

Das /*!40014 ... */ Syntax ist a Bedingter Kommentar Das wird in MySQL Version 4.0.14 und später ausgeführt. Die Einstellung der alten Fremdschlüsselprüfungen wird gegen Ende der Dump -Datei wiederhergestellt:

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

Beachten Sie, dass die bedingten Kommentare sind vom Kunden interpretiert (und nicht der Server). Wenn Sie die Dump -Datei mit einem Client laden, der sie nicht unterstützt, werden fremde Schlüsselprüfungen nicht deaktiviert und Sie können Fehler aufnehmen. Für die besten Ergebnisse würde ich empfehlen, Dump -Dateien mit dem offiziellen MySQL -Befehlszeilenclient zu laden:

mysql -hserver -uuser -p database < dumpfile.sql

Es ist auch erwähnenswert, dass wenn mysqldump wird mit dem ausgeführt --compact Option, dann werden die Befehle zum Deaktivieren und erneutem Anerkennung der ausländischen Schlüsselprüfungen in der Dump-Datei weggelassen.

Andere Tipps

In acht nehmen. Aus irgendeinem Grund schreibt MySQLDUMP nicht die fremd_key_checks = 0, wenn die Option -Kompaktoption verwendet wird.

Ciao.

Wenn Sie beim Exportieren von SQL PHPMYADMIN verwenden, wählen Sie Benutzerdefinierte Exportmethode. Klicken Sie unter den Kontrollkästchen -Optionen auf "Deaktivieren Sie ausländische Schlüsselprüfungen"Die exportierte SQL -Erklärung hat die Deaktivierung und aktiviert Fremdschlüsselprüfungen am Anfang bzw. am Ende der Ausgabedatei.

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

Dies kann passieren, wenn Sie verwenden --compact Als einer von dir mysqldump Befehl.--compact inklusive --skip-comments also anstatt --compact man sollte verwenden --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

Achten Sie auf Ihren MySQL -Client, den Sie verwenden, mit dem mysql Befehl, kein Problem. Schluss machen:

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

Wiederherstellung:

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

Alles ist gut.

Mit Hilfe von Ein anderer MySQL -Client (mycli in meiner Situation) das Dump-Datei wiederherzustellen:

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

Ich nehme das an mycli verstehen nicht Bedingte Kommentare.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top