MySQL导入数据库错误,因为扩展插入

vcirk6k6  于 2023-03-22  发布在  Mysql
关注(0)|答案(6)|浏览(228)

我正在导入一个400MB(未压缩)的MySQL数据库。我正在使用BIGDUMP,并且我得到这个错误:
停在387号线。
当前查询在此处包含超过300个转储行。如果您的转储文件是由某些工具创建的,而该工具没有在每个查询的末尾放置分号和换行符,或者如果您的转储包含扩展插入,则可能发生这种情况。请阅读BigDump常见问题解答以了解更多信息。
我相信该文件确实包含扩展插入,但我无法重新生成数据库,因为它已从旧服务器中删除。如何导入此数据库或将其转换为要导入的数据库?

编辑

看来唯一可行的答案是分离扩展插入,但我仍然需要弄清楚如何分割文件,如下面的答案所示。

js5cn81o

js5cn81o1#

您不需要对.sql文件进行任何更改:只要在任何文本编辑器中打开bigdump.php,找到行

define ('MAX_QUERY_LINES',300);

把300换成你想要的任何东西。

xsuvu9jc

xsuvu9jc2#

只需编辑转储文件,以便在300次插入之后开始一条新语句:

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (1, 'a', 'b'),
    (2, 'c', 'd'),
    (3, 'e', 'f'),
    -- snip --
    (300, 'w', 'x');
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (301, 'y', 'z'),
    (302, ... etc

您可以通过在任何文本编辑器中打开您的<backup>.sql文件来做到这一点,它只是纯文本。有时备份可能是.gz.bz文件,但它们只是zip:如果解压缩这些gzip或bzip文件,最终将得到一个.sql文件,您可以轻松编辑它。
编写一个脚本将每个语句拆分为任意行数的语句可能并不太难。基本的程序逻辑可能如下所示:
1.查找以“INSERT”开头的行。
1.复制这一行,直到单词“VALUES”的末尾
1.单步执行以下所有行,边执行边计数。
1.如果你的计数器达到了300,那么在最后一行的末尾加上一个分号,然后粘贴前面的“INSERT ... VALUES”语句。将你的计数器重置为1,然后转到第3步。
1.如果你到达了一个以“INSERT”开头的行,重置计数器为1,然后转到第2步。
不过,你可以手动完成这一步,然后确保以后所有的备份都不使用扩展插入。此外,phpMyAdmin允许你在创建导出时设置最大语句大小,所以它基本上会为你完成上述操作。
不过,你对内存限制所做的可能是一个更简单的解决方案。对于其他处于类似情况无法更改这些限制的人,请尝试上面的方法。

aemubtdh

aemubtdh3#

对我来说,它的工作原理如下:
搜索

$max_query_lines = 300;

然后简单地替换为

$max_query_lines = 3000;
0lvr5msh

0lvr5msh4#

在增加内存缓冲区并通过SSH执行普通MySQL导入后,我能够成功导入数据库。
我使用以下命令和绝对路径:

mysql -u <username> -p < /home/dir/dumpfile.sql
qcuzuvrc

qcuzuvrc5#

感谢您的'max_query_lines'和'INSERT'解决方案!
“这两种解决方案都有一些缺点。如果不使用扩展插入,输出转储将比使用扩展插入的转储大许多倍。增加max_query_lines将增加bigdump脚本的内存使用量,并且您的服务器可能会耗尽内存。”
来源:http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/

fhity93d

fhity93d6#

打开bigdump.php并更改以下行:

$max_query_lines = 300;

改为:

$max_query_lines = 300000;

相关问题