Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysqldump时,即使使用max_allowed_packet参数,也会丢失与mysql的连接_Mysql_Database Connection - Fatal编程技术网

使用mysqldump时,即使使用max_allowed_packet参数,也会丢失与mysql的连接

使用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

我想在我的远程服务器数据库中转储特定的表,这可以正常工作,但其中一个表有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' --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使用,而是触发了