Dis*_*oat 46 mysql command-line foreign-keys mysqlimport
我有一个MySQL数据库的备份脚本,使用mysqldump该--tab选项,因此它.sql为结构生成一个文件,并.txt为内容生成一个文件(管道分隔).
有些表有外键,所以当我导入它时,我收到错误:
第8行的错误1217(23000):无法删除或更新父行:外键约束失败
我知道使用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]
Run Code Online (Sandbox Code Playgroud)
是否有其他方法可以在命令行上禁用FK检查?
Wik*_*tor 92
您也可以使用命令--init-command参数mysql.
即: mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...
Exp*_*lls 69
您可以通过将字符串连接到内联文件来完成此操作.我确信有一种更简单的方法来连接字符串和文件,但它确实有效.
cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql
Run Code Online (Sandbox Code Playgroud)
我不认为你需要将它设置回1,因为它只是一个会话.
小智 15
只是另一个做同样的事情:
{ echo "SET FOREIGN_KEY_CHECKS=0;" ; cat imports.sql ; } | mysql
Run Code Online (Sandbox Code Playgroud)
dee*_*pak 11
登录到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;
小智 10
.gz 文件的另一种方法:
gunzip < backup.sql.gz | mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" -u <username> -p