我在 mySQL Workbench 中尝试将 .sql 文件中的数据转储(由 phpMyAdmin 生成)导入 mySQL(服务器管理>数据转储>从磁盘导入),但它一直失败并显示以下输出:
10:47:14 正在恢复 C:\myfolder\localhost.sql ( )
运行:mysql.exe --host=127.0.0.1 --user=root --password=xxxxxxx --port=3306 --comments< C:\myfolder\localhost.sql
操作失败,退出代码为 1
10:47:15 C:\myfolder\localhost.sql 导入已完成
当我查看模式时,它看起来导入了 6 个表(约 50 个)并且几乎没有任何数据。
勘误表:
- 似乎没有任何约束或关系。所有数据都是通过几个带有硬编码值的 DROP TABLE IF EXISTS;CREATE TABLE;INSERT INTO 系列添加的。
- 该文件包含大量大块。文件本身大小超过 400 MB。
- 当我手动检查文件的任何子句的效果是否有效时,我发现它被非常大的硬编码块的 INSERT INTO sql 挂住了。不确定这是否重要?
- 我还注意到一些块的长度大于 32768,块长度有上限吗?
答案1
我没有找到问题的根本原因,但我找到了问题的根源。我有一个非常大的附件表,其中用 INSERT VALUES 写入。我删除了这个表,然后尝试将其作为 SQL 脚本运行。但我收到了一个新错误(我现在想不起来了)。谷歌搜索新错误告诉我,如果不增加 max_allowed_packet 变量,脚本就太长了。将其调到一个非常大的数字允许脚本运行。
答案2
您的数据库中是否有任何外键约束?如果有,您必须确保按照允许强制执行外键的顺序导入表。如果您尝试创建一个具有引用尚未创建的表的外键的表,您将收到此类错误。如果这是问题所在,您要么必须操作转储文件以使其处于“正确”顺序,要么必须重新进行转储,一次一个表,顺序要可接受。我有一个脚本可以为我的数据库执行此操作,但我从未尝试通过 phpMyAdmin 执行此操作。