由于扩展插入,MySQL导入数据库错误

时间:2009-03-25 07:35:34

标签: mysql mysqldump

我正在导入一个400MB(未压缩的)MySQL数据库。我正在使用BIGDUMP,我收到了这个错误:

Stopped at the line 387.

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos.

我认为该文件确实包含扩展插入,但是我无法重新生成数据库,因为它已从旧服务器中删除。如何导入此数据库或将其转换为要导入?

感谢您的帮助。

最佳

尼克

修改 似乎唯一可行的答案是分离扩展插入,但我仍然需要帮助找出如何拆分文件,如下面的答案所示。请帮忙。谢谢。

7 个答案:

答案 0 :(得分:34)

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

define ('MAX_QUERY_LINES',300);

并将300替换为您想要的任何内容。

答案 1 :(得分:8)

只需编辑转储文件,以便在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文件,但它们只是拉链:如果您解压缩这些gzip压缩文件或bzip压缩文件,最终会得到一个.sql文件你可以轻松编辑。

编写一个脚本以在任意数量的行之后拆分每个语句可能不会太难。基本程序逻辑可能如下所示:

  1. 找到以“INSERT”开头的行。
  2. 将该行复制到“VALUES”一词的结尾
  3. 逐步完成以下所有行,随时向上计算。
  4. 如果你的计数器达到300,那么在最后一行的末尾添加一个分号并粘贴之前的“INSERT ... VALUES”语句。将您的计数器重置为1并转到步骤3.
  5. 如果您到达以“INSERT”开头的行,请将计数器重置为1并转到步骤2.
  6. 但是,您可以手动执行此操作,然后确保所有将来的备份都不使用扩展插入。另外,phpMyAdmin允许您在创建导出时设置最大语句大小,因此它基本上会为您执行上述操作。

    尽管如此,你对内存限制做了什么可能是一个更容易的解决方案。对于处于类似情况但无法改变这些限制的任何其他人,请尝试以上操作。

答案 2 :(得分:4)

在增加内存缓冲区并通过SSH进行普通的mysql导入后,我能够成功导入数据库。

我使用以下命令和绝对路径:

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

尼克

答案 3 :(得分:3)

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

搜索

$max_query_lines = 300;

然后简单地替换为

$max_query_lines = 3000;

答案 4 :(得分:0)

感谢'max_query_lines'和'INSERT'解决方案!

“两种解决方案都有一些缺点。如果没有扩展插入,输出转储将比扩展插入转储大许多倍。增加max_query_lines将增加bigdump脚本的内存使用量,并且您的服务器可能会耗尽内存。”< / p>

来源:http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/

答案 5 :(得分:0)

老问题,但我通过互联网搜索找到了它,它还没有得到我想要的答案,因为看起来phpMyAdmin已经重命名了设置。

禁用&#39;扩展插入&#39;在phpMyAdmin导出中,您需要设置插入数据时使用的语法&#39;设置为第一个选项:

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3)

答案 6 :(得分:0)

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

$max_query_lines = 300;

对此:

$max_query_lines = 300000;