即使使用max_allowed_pa​​cket参数,使用mysqldump时也会失去与mysql的连接

Joh*_*igs 2 mysql database-connection

我想将特定的表转储到我的远程服务器数据库中,效果很好,但是其中一个表是9m行,我得到:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359
Run Code Online (Sandbox Code Playgroud)

因此,在在线阅读后,我了解到我需要增加我的max_allowed_pa​​cket,并有可能将其添加到我的命令中。

所以我运行以下命令来转储我的表:

mysqldump -uroot -h my.host -p'mypassword' --max_allowed_packet=512M db_name table_name | gzip  > dump_test.sql.gz
Run Code Online (Sandbox Code Playgroud)

并且由于某种原因,我仍然得到:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2602499
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

它的记录很奇怪,只有900万条记录...不太大。

DPa*_*ini 6

对我来说,当我跳过锁表时一切正常

 mysqldump -u xxxxx --password=xxxxx --quick --max_allowed_packet=512M --skip-lock-tables --verbose   -h xxx.xxx.xxx.xxx > db.sql
Run Code Online (Sandbox Code Playgroud)

我可能会产生一致性问题,但允许我毫无问题地备份 5GB 数据库。


O. *_*nes 5

尝试将--quick选项添加到mysqldump命令中;它在大型桌子上工作得更好。它将行从结果集流到输出,而不是将整个表都包含在表中,然后将其写出。

 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
 gzip  > dump_test.sql.gz
Run Code Online (Sandbox Code Playgroud)

您也可以尝试将--compress选项添加到mysqldump命令。这使得它对MySQL服务器使用对网络更友好的压缩连接协议。注意,您仍然需要gzip管道。MySQL的压缩协议不会导致转储脱离mysqldump压缩。

服务器也可能超时了与mysqldump客户端的连接。您可以尝试重置超时时间。通过其他方式连接到服务器并发出这些查询,然后运行mysqldump作业。

这些将超时设置为一个日历日。

    SET GLOBAL wait_timeout=86400;
    SET GLOBAL interactive_timeout=86400;
Run Code Online (Sandbox Code Playgroud)

最后,如果您的服务器(通过路由器和防火墙)距离您的计算机较远,则可能会中断mysqldump的连接。一些劣质的路由器和防火墙对NAT(网络地址转换)会话具有时间限制。他们应该在使用过程中使这些会话保持活动状态,但有些则不会。也许您正在达到公司为外部连接配置的时间或大小限制。

尝试登录更靠近服务器的计算机并mysqldump在该计算机上运行。然后使用其他方法(sftp?)将您的gz文件复制到您自己的计算机上。

或者,您可能必须分段此文件的转储。您可以执行类似的操作(未调试)。

mysqldump  -uroot -h my.host -p'mypassword'  \ 
          db_name table_name --skip-create-options --skip-add-drop-table \
          --where="id>=0 AND id < 1000000" | \
          gzip....
Run Code Online (Sandbox Code Playgroud)

然后用这些行重复。

          --where="id>=1000000 AND id < 2000000" | \

          --where="id>=2000000 AND id < 3000000" | \
          ...
Run Code Online (Sandbox Code Playgroud)

直到获得所有行。颈部疼痛,但可以。

  • 谢谢朋友,我认为 --compress 带来了不同:) 欣赏它@O。琼斯 (2认同)