Pouvez-vous créer automatiquement un fichier mysqldump qui n'impose pas de contraintes de clé étrangère?

quand j'exécute une commande mysqldump sur ma base de données et que j'essaie de l'importer, elle échoue car elle tente de créer les tables par ordre alphabétique, même si elles peuvent avoir une clé étrangère qui renvoie à une table plus tard dans le fichier. Il ne semble pas y avoir quoi que ce soit dans la documentation et j'ai trouvé des réponses comme ce qui disent de mettre à jour le fichier après qu'il a été créé pour inclure:

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

est-il impossible de définir automatiquement ces lignes ou Exporter les tables dans l'ordre nécessaire (sans avoir à spécifier manuellement tous les noms de table car cela peut être fastidieux et sujet à des erreurs)? Je pourrais envelopper ces lignes dans un script, mais je me demandais s'il y avait un moyen facile de m'assurer que je peux décharger un fichier et ensuite l'importer sans le mettre à jour manuellement.

35
demandé sur Community 2010-03-12 03:17:51

5 réponses

la commande mysqldump incluse avec MySQL 5.0.51 (et selon les versions du journal des modifications depuis 4.1.1 ) permet de désactiver les vérifications de clés étrangères. Par défaut, mysqldump inclut la ligne suivante en haut du fichier dump:

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

la syntaxe /*!40014 ... */ est un commentaire conditionnel qui sera exécuté sur MySQL 4.0.14 et plus tard. Le vieux paramètre de vérification de clé étrangère est restauré à la fin du dump dossier:

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
42
répondu Phil Ross 2010-03-12 00:46:35

attention. Pour une raison quelconque, mysqldump n'écrit pas la valeur FOREIGN_KEY_CHECKS=0 si l'option --compact est utilisée.

Ciao.

27
répondu edtruant 2013-03-25 20:59:28

si vous utilisez phpMyAdmin lors de L'exportation de SQL, choisissez Custom Export Method . Puis, parmi les options de la case à cocher, cliquez sur " désactiver les vérifications de clés étrangères ". L'instruction SQL exportée aura la vérification de clé étrangère désactivée et activée au début et à la fin du fichier de sortie respectivement.

ce n'est pas" automatique", mais vous n'aurez pas à écrire les déclarations vous-même pour chaque exportation.

9
répondu alds 2013-10-04 11:16:03

cela peut arriver si vous utilisez --compact comme une de vos commandes mysqldump . --compact comprend --skip-comments ainsi, au lieu de --compact on devrait utiliser --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

7
répondu iRonin 2015-05-05 17:23:33

méfiez-vous de votre client MySQL que vous utilisez, avec la commande mysql , pas de problème. Dumping:

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

restauration:

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

tout va bien.

avec l'utilisation de un autre client MySQL ( mycli dans ma situation) pour restaurer le fichier dump:

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

je suppose que mycli ne comprennent pas commentaires conditionnels .

0
répondu freezed 2018-07-16 23:16:48