MySQLデータベースのバックアップスクリプトがあり、mysqldump
を--tab
オプションとともに使用して、構造の.sql
ファイルと.txt
ファイル(パイプ区切り)を生成します)コンテンツ用。
一部のテーブルには外部キーがあるため、インポートするとエラーが発生します。
エラー1217(23000)、行8:親行を削除または更新できません:外部キー制約が失敗します
SET FOREIGN_KEY_CHECKS=0
(およびSET 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チェックを無効にする他の方法はありますか?
これを行うには、文字列をファイルにインラインで連結します。文字列とファイルを連結する簡単な方法があると確信していますが、機能します。
cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql
1つのセッションであるため、1に戻す必要はないと思います。
mysql
コマンドの--init-command
パラメーターも使用できます。
つまり:mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...
同じことをする別の1つ:
{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql
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;