繁体   English   中英

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

[英]MySQL archive data…what to do when it's too big

我在PHP脚本中使用INSERT INTODELETE FROM组合将数据从可操作的MySQL表中取出并放入存档表中。

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

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

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

谢谢!

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

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

根据文档,您应该将--single-transaction与--quick结合起来。

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

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

这个对我有用

由于表格过大,请查找@ Will的2013年错误代码的答案。

然而,事实证明这不是我的问题。 当我运行一个SELECT ,给它一个WHERE id>500000 AND id<1000000 (例子)时,我很快发现我的数据的一部分已经损坏了。

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

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

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

你可以试试--var_max_allowed_packet=??? --var_net_buffer_length=???

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

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

这张桌子有多大?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM