使用mysqldump时,即使使用max_allowed_packet参数,也会丢失与mysql的连接
我想在我的远程服务器数据库中转储特定的表,这可以正常工作,但其中一个表有9m行,我得到:使用mysqldump时,即使使用max_allowed_packet参数,也会丢失与mysql的连接,mysql,database-connection,Mysql,Database Connection,我想在我的远程服务器数据库中转储特定的表,这可以正常工作,但其中一个表有9m行,我得到: Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359 所以在在线阅读之后,我明白我需要增加我的max_allowed_数据包,并且有可能将它添加到我的命令中 因此,我运行以下命令来转储我的表: mysqldump -uroot -h my.host -p'mypassword
Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359
所以在在线阅读之后,我明白我需要增加我的max_allowed_数据包,并且有可能将它添加到我的命令中
因此,我运行以下命令来转储我的表:
mysqldump -uroot -h my.host -p'mypassword' --max_allowed_packet=512M db_name table_name | gzip > dump_test.sql.gz
出于某种原因,我仍然得到:
Lost connection to MySQL server during query when dumping table `table_name` at row: 2602499
我做错什么了吗
奇怪的是,只有900万条记录……不是太大。尝试将--quick
选项添加到mysqldump
命令中;它适用于大桌子。它将行从resultset流式传输到输出,而不是将整个表变为slurp,然后将其写出
mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
gzip > dump_test.sql.gz
您还可以尝试将--compress
选项添加到mysqldump命令中。这使得它可以使用对网络更友好的压缩连接协议连接MySQL服务器。注意,您仍然需要gzip
管道;MySQL的压缩协议不会导致转储来自mysqldump
compressed
也可能是服务器正在超时与mysqldump
客户端的连接。您可以尝试重置超时持续时间。通过其他方式连接到服务器并发出这些查询,然后运行mysqldump
作业
这些设置将超时设置为一个日历日
SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;
最后,如果您的服务器远离您的机器(通过路由器和防火墙),则可能有东西中断了mysqldump的连接。一些劣质路由器和防火墙对NAT(网络地址转换)会话有时间限制。它们应该在使用过程中保持这些会话的活动性,但有些没有。或者,您可能正在达到公司为外部连接配置的时间或大小限制
尝试登录到靠近服务器的机器上,并在其上运行mysqldump
。
然后使用其他方法(sftp?)将gz文件复制到您自己的机器上
或者,您可能必须对此文件的转储进行分段。您可以这样做(未调试)
mysqldump-uroot-h my.host-p'mypassword'\
db_name table_name--跳过创建选项--跳过添加-删除表\
--其中=“id>=0且id<1000000”|\
gzip。。。。
然后用这些线重复
--where="id>=1000000 AND id < 2000000" | \
--where="id>=2000000 AND id < 3000000" | \
...
--where=“id>=1000000且id<2000000”|\
--其中=“id>=2000000且id<3000000”|\
...
直到你得到所有的行。颈部疼痛,但它会起作用。尝试将--quick
选项添加到mysqldump
命令中;它适用于大桌子。它将行从resultset流式传输到输出,而不是将整个表变为slurp,然后将其写出
mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
gzip > dump_test.sql.gz
您还可以尝试将--compress
选项添加到mysqldump命令中。这使得它可以使用对网络更友好的压缩连接协议连接MySQL服务器。注意,您仍然需要gzip
管道;MySQL的压缩协议不会导致转储来自mysqldump
compressed
也可能是服务器正在超时与mysqldump
客户端的连接。您可以尝试重置超时持续时间。通过其他方式连接到服务器并发出这些查询,然后运行mysqldump
作业
这些设置将超时设置为一个日历日
SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;
最后,如果您的服务器远离您的机器(通过路由器和防火墙),则可能有东西中断了mysqldump的连接。一些劣质路由器和防火墙对NAT(网络地址转换)会话有时间限制。它们应该在使用过程中保持这些会话的活动性,但有些没有。或者,您可能正在达到公司为外部连接配置的时间或大小限制
尝试登录到靠近服务器的机器上,并在其上运行mysqldump
。
然后使用其他方法(sftp?)将gz文件复制到您自己的机器上
或者,您可能必须对此文件的转储进行分段。您可以这样做(未调试)
mysqldump-uroot-h my.host-p'mypassword'\
db_name table_name--跳过创建选项--跳过添加-删除表\
--其中=“id>=0且id<1000000”|\
gzip。。。。
然后用这些线重复
--where="id>=1000000 AND id < 2000000" | \
--where="id>=2000000 AND id < 3000000" | \
...
--where=“id>=1000000且id<2000000”|\
--其中=“id>=2000000且id<3000000”|\
...
直到你得到所有的行。颈部疼痛,但它会起作用。使用上面的JohnBigs注释,
--compress
标志对我起作用
我以前曾尝试过
--单笔交易
,--跳过扩展插入
,以及--快速
的w/o成功。使用上面的JohnBigs注释,--压缩
标志对我来说是有效的
我以前尝试过--单笔交易
,--跳过扩展插入
,以及--快速
不成功。其他尝试选项:
net_read_timeout=3600
net_write_timeout=3600
在my.ini/my.cnf上或通过设置全局…
其他选项尝试:
net_read_timeout=3600
net_write_timeout=3600
在my.ini/my.cnf上或通过
SET GLOBAL…
对我来说,当我跳过锁表时,所有这些都可以正常工作
mysqldump -u xxxxx --password=xxxxx --quick --max_allowed_packet=512M --skip-lock-tables --verbose -h xxx.xxx.xxx.xxx > db.sql
我可能会在一致性方面产生问题,但允许我备份5GB数据库而不会出现任何问题。对我来说,跳过锁表时,所有这些都可以正常工作
mysqldump -u xxxxx --password=xxxxx --quick --max_allowed_packet=512M --skip-lock-tables --verbose -h xxx.xxx.xxx.xxx > db.sql
我可能会在一致性方面产生问题,但允许我备份5GB数据库而不会出现任何问题。我的服务器上也有类似问题,MySQL显然会在夜间备份时重新启动。它始终是同一个数据库,但实际的表有时会有所不同 尝试了其他答案中的几个,但最终只是一些cronjob执行的查询没有完成。这并没有导致太多的CPU和RAM使用,而是触发了