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.
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 */;
attention. Pour une raison quelconque, mysqldump n'écrit pas la valeur FOREIGN_KEY_CHECKS=0 si l'option --compact est utilisée.
Ciao.
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.
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
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 .