web-dev-qa-db-ja.com

コマンドラインでの外部キーチェックの無効化

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チェックを無効にする他の方法はありますか?

46
DisgruntledGoat

これを行うには、文字列をファイルにインラインで連結します。文字列とファイルを連結する簡単な方法があると確信していますが、機能します。

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

1つのセッションであるため、1に戻す必要はないと思います。

69
Explosion Pills

mysqlコマンドの--init-commandパラメーターも使用できます。

つまり:mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...

MySQL 5.5ドキュメント-mysqlオプション

87
Wiktor

同じことをする別の1つ:

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

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;

9
deepak