Ho uno script di backup per il mio database MySQL, utilizzando mysqldump
con l'opzione --tab
quindi produce un file .sql
per la struttura e un file .txt
(pipe-separato) per il contenuto.Disabilitazione dei controlli di chiave esterna sulla riga di comando
Alcune tabelle hanno chiavi esterne, così quando ho importarlo sto ottenendo l'errore:
ERROR 1217 (23000) at line 8: Cannot delete or update a parent row: a foreign key constraint fails
So sull'utilizzo SET FOREIGN_KEY_CHECKS=0
(e SET FOREIGN_KEY_CHECKS=1
in seguito). Se aggiungo quelli a ciascun file .sql
, l'importazione funziona. Ma poi ovviamente sul prossimo mysqldump
quelli vengono sovrascritti.
Ho anche provato a fare funzionare come un comando separato, come qui di seguito ma l'errore ritorna:
echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database]
[all the imports]
echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database]
C'è qualche altro modo per disattivare i controlli FK sulla riga di comando?
questo sembra il modo migliore. È sorprendente che 'mysqldump' non abbia un'opzione' --disable-foreign-keys'. – Barmar
@Barmar ricorda che le chiavi esterne sono un prodotto del motore InnoDB piuttosto che lo stesso MySQL –
Grazie, funziona! Quindi l'impostazione dei controlli FK funziona solo per un comando, invece di persistere su più comandi? – DisgruntledGoat