Mam skrypt kopii zapasowej dla mojej bazy danych MySQL, używając mysqldump
z opcją --tab
więc tworzy plik .sql
dla struktury i .txt
plik (rura rozdzielone) dla treści.Wyłączenie klucz obcy kontrole linii poleceń
Niektóre tabele mają klucze obce, więc kiedy zaimportować go dostaję błąd:
ERROR 1217 (23000) at line 8: Cannot delete or update a parent row: a foreign key constraint fails
wiem o użyciu SET FOREIGN_KEY_CHECKS=0
(i SET FOREIGN_KEY_CHECKS=1
później). Jeśli dodaję je do każdego pliku .sql
, import działa. Ale oczywiście na następnym mysqldump
te zostaną nadpisane.
Próbowałem też uruchomić go jako oddzielny polecenia, jak poniżej ale błąd wraca:
echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database]
[all the imports]
echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database]
Czy istnieje jakiś inny sposób, aby wyłączyć sprawdzanie FK w wierszu polecenia?
wygląda to jak najlepszy sposób. Zaskakujące jest, że 'mysqldump' nie ma opcji' --disable-foreign-keys'. – Barmar
@Barmar pamiętać, że klucze obce są produktem silnika InnoDB, a nie samym MySQL –
Dzięki, to działa! Czy ustawienie kontroli FK działa tylko dla jednego polecenia, a nie dla wielu poleceń? – DisgruntledGoat