我有一个备份脚本为我的MySQL数据库,使用mysqldump
与--tab
选项,它产生.sql
的结构文件和.txt
内容文件(竖线分隔)。
有些表有外键,所以当我导入它,我得到的错误:
在8号线ERROR 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]
有一些其他的方式来在命令行上禁用FK检查?
您可以通过连接字符串的文件内嵌做到这一点。 我敢肯定有连接字符串和文件更简单的方法,但它的作品。
cat <(echo "SET FOREIGN_KEY_CHECKS=0;") imports.sql | mysql
我不认为你需要将其设置回1,因为它只是一个会话。
您还可以使用--init-command
的参数mysql
命令。
即: mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...
mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ...
MySQL的5.5文档- MySQL的选择
又一个一个做同样的:
{ 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;