当我在我的数据库上运行mysqldump命令,然后尝试导入它时,它会失败,因为它试图按字母顺序创建表,即使它们可能有一个外键引用了文件中稍后的表。在documentation中似乎没有任何东西,我找到了像this这样的答案,它说要在创建文件后更新它,以包括:
set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;
有没有办法自动设置这些行或按必要的顺序导出表(而不必手动指定所有表名,因为这可能会很繁琐且容易出错)?我可以将这些行包装在脚本中,但我想知道是否有一种简单的方法来确保我可以转储文件,然后在不手动更新它的情况下导入它。
发布于 2010-03-12 08:34:48
默认情况下,从4.1.1版本开始随MySQL一起提供的mysqldump
命令会生成一个关闭外键检查的脚本。在转储文件的顶部附近包含以下行:
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40014 ... */
语法是将在MySQL版本4.0.14及更高版本上执行的conditional comment。在转储文件末尾恢复旧的外键检查设置:
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
注意,条件注释是interpreted by the the client (而不是服务器)。如果使用不支持外键检查的客户机加载转储文件,则不会禁用外键检查,并且可能会遇到错误。为了获得最佳效果,我建议使用官方的mysql命令行客户端加载转储文件:
mysql -hserver -uuser -p database < dumpfile.sql
还值得注意的是,如果使用--compact
选项运行mysqldump
,那么将从转储文件中省略禁用和重新启用外键检查的命令。
发布于 2013-03-26 04:59:28
当心。由于某些原因,如果使用-- FOREIGN_KEY_CHECKS=0选项,mysqldump就不会写入压缩文件。
再见。
发布于 2015-05-06 01:23:33
如果您将--compact
用作mysqldump
命令之一,则可能会发生这种情况。--compact
包含--skip-comments
,因此--compact
应该使用--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
https://stackoverflow.com/questions/2429655
复制相似问题