MySQL归档数据......当它太大时该怎么办

时间:2011-11-24 02:56:33

标签: php mysql mysqldump

我使用了INSERT INTO& PHP脚本中的DELETE FROM组合,用于将数据从可操作的MySQL表中取出并放入存档表中。

存档表格太大了。即使没有对它进行日常操作,mysqldump在我们备份时会窒息(错误2013):

Error 2013: Lost connection to MySQL server during query when dumping table 'some_table' at row: 1915554

我该怎么办?我的PHP脚本应该将它移动到另一个DB(如何?)?是否可以将大表保留在操作数据库中? - 在这种情况下,如何解决mysqldump问题?

谢谢!

5 个答案:

答案 0 :(得分:4)

您是否偶然使用内存缓冲并且耗尽交换和物理RAM?如果是这样,您可以尝试逐行转储。

尝试将--quick添加到mysqldump语句中。

根据文档,你应该将--single-transaction与--quick。

结合起来

来源:http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

答案 1 :(得分:1)

查看@ Will的2013年错误代码的答案,因为表格过大。

然而,事实证明这不是我的问题。当我运行SELECTWHERE id>500000 AND id<1000000(示例)时,我很快发现我的部分数据已损坏。

因为这个我无法复制表格内容,我无法使用mysqldump备份表格(或数据库),我甚至可以说DELETE FROM来摆脱损坏的行。

相反,我使用CREATE TABLE some_tbl_name SELECT * FROM corrupted_table WHERE id>500000 AND id<1000000,然后一旦我将未损坏的数据保存到另一个表中,我就可以删除损坏的表并创建一个新表。

我不接受我自己的答案,因为Will是正确的,但是如果有人遇到同样的问题,我已经在这里发布了。

答案 2 :(得分:1)

 mysqldump --opt --max_allowed_packet=128M base_de_datos > bd.sql

它对我有用

答案 3 :(得分:0)

您可以尝试--var_max_allowed_packet=???--var_net_buffer_length=???

您还可以尝试禁用扩展插入:--skip-extended-insert

但这是假设你诊断过大的表是正确的。

这张桌子有多大?

答案 4 :(得分:0)

至于第二个问题,尝试直接登录MySQL服务器并从那里运行mysqldump,最好将转储写入本地文件系统,但移动普通数据的网络连接比任何SQL连接都更可靠