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?

37
demandé sur DisgruntledGoat 2013-04-11 04:20:50

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.

63
répondu Explosion Pills 2013-04-11 00:32:40

vous pouvez aussi utiliser --init-command paramètre mysql la commande.

C'est-à-dire: mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...

MySQL 5.5 Documentation-mysql options

61
répondu Wiktor 2016-06-01 03:28:25

Juste un autre de faire de même:

{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql
13
répondu fx991 2014-09-19 11:17:28

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;

1
répondu deepak 2018-04-18 14:48:48