我使用了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问题?
谢谢!
答案 0 :(得分:4)
您是否偶然使用内存缓冲并且耗尽交换和物理RAM?如果是这样,您可以尝试逐行转储。
尝试将--quick添加到mysqldump语句中。
根据文档,你应该将--single-transaction与--quick。
结合起来答案 1 :(得分:1)
查看@ 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是正确的,但是如果有人遇到同样的问题,我已经在这里发布了。
答案 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连接都更可靠