Подтвердить что ты не робот

Отключение проверки внешнего ключа в командной строке

У меня есть резервная копия script для моей базы данных MySQL, используя mysqldump с опцией --tab, поэтому она создает файл .sql для структуры и файл .txt (разделенный на трубы) для содержимого.

В некоторых таблицах есть внешние ключи, поэтому при импорте я получаю сообщение об ошибке:

ОШИБКА 1217 (23000) в строке 8: Не удается удалить или обновить родительскую строку: ограничение внешнего ключа завершено

Я знаю об использовании SET FOREIGN_KEY_CHECKS=0SET FOREIGN_KEY_CHECKS=1 после этого). Если я добавлю их в каждый .sql файл, то импорт будет работать. Но тогда, очевидно, на следующем mysqldump они будут перезаписаны.

Я также попытался запустить его как отдельную команду, как показано ниже, но ошибка возвращается:

echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database] 
[all the imports]
echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database] 

Есть ли другой способ отключить проверки FK в командной строке?

4b9b3361

Ответ 1

Вы можете сделать это, объединив строку в файл inline. Я уверен, что есть более простой способ конкатенации строк и файлов, но он работает.

cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql

Я не думаю, что вам нужно установить его обратно в 1, поскольку это всего лишь один сеанс.

Ответ 3

Еще один, чтобы сделать то же самое:

{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql

Ответ 4

Войдите в командную строку mysql:

mysql -u <username> -p -h <host_name or ip> Затем запустите

1 SET FOREIGN_KEY_CHECKS=0;

2 SOURCE/pathToFile/backup.sql;

3 SET FOREIGN_KEY_CHECKS=1;