Désactivation des contrôles de clés étrangères sur la ligne de commande
j'ai un script de sauvegarde pour ma base de données MySQL, en utilisant mysqldump
--tab
option de sorte qu'il produit un .sql
le fichier pour la structure et un .txt
fichier (séparées de canal) pour le contenu.
certaines tables ont des clés étrangères, donc quand je les importe je reçois l'erreur:
ERREUR 1217 (23000) à la ligne 8: Impossible de supprimer ou de mettre à jour un parent row: a foreign key constraint fails
je sais que sur l'utilisation de SET FOREIGN_KEY_CHECKS=0
(et SET FOREIGN_KEY_CHECKS=1
par la suite). Si j'ajoute ceux pour chaque .sql
fichier puis l'importation fonctionne. Mais ensuite évidemment sur le prochain mysqldump
ceux écrasés.
j'ai aussi essayé de courir comme une commande distincte, comme ci-dessous mais l'erreur est:
echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database]
[all the imports]
echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database]
y a-t-il un autre moyen de désactiver les vérifications FK sur la ligne de commande?
4 réponses
Vous pouvez le faire en concaténant la chaîne vers le fichier inline. Je suis sûr qu'il y a un moyen plus facile de concaténer les chaînes et les fichiers, mais ça marche.
cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql
Je ne pense pas que vous avez besoin de revenir à 1 puisque c'est juste une session.
vous pouvez aussi utiliser --init-command
paramètre mysql
la commande.
C'est-à-dire: mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...
Juste un autre de faire de même:
{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql
Connexion à mysql:
mysql -u <username> -p -h <host_name or ip>
puis courir
1 SET FOREIGN_KEY_CHECKS=0;
2 SOURCE /pathToFile/backup.sql;
3 SET FOREIGN_KEY_CHECKS=1;