我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。

文件处理需要一段时间,进程中途死亡,并出现以下错误:

2006, MySQL server has gone away

我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?


当前回答

我也有同样的问题,但改变my.ini/my.cnf文件下[mysqld]的max_allowed_packet。

添加一条线

max_allowed_packet = 500

现在重新启动MySQL服务,一旦你完成。

其他回答

我在DigitalOcean Ubuntu服务器上也出现了同样的错误。

我尝试改变max_allowed_packet和wait_timeout设置,但他们都没有修复它。

原来我的服务器内存不足。我添加了一个1GB的交换文件,这解决了我的问题。

用free -h检查你的内存,看看这是否是导致它的原因。

错误:2006 (CR_SERVER_GONE_ERROR)

消息:MySQL服务器已经消失了

通常,您可以重试连接,然后再次执行查询来解决这个问题-在完全放弃之前尝试3-4次。

我假设您正在使用PDO。如果是这样,那么您将捕获PDO异常,增加一个计数器,然后在计数器低于阈值时再次尝试。

如果你有一个导致超时的查询,你可以执行以下命令来设置这个变量:

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

其中300是您认为查询可能花费的最大时间的秒数。

关于如何处理Mysql连接问题的进一步信息。

编辑:您可能还想使用的另外两个设置是net_write_timeout和net_read_timeout。

检查Mysql服务器的日志总是一个好主意,因为它消失的原因。

它会告诉你的。

我也有同样的问题,但改变my.ini/my.cnf文件下[mysqld]的max_allowed_packet。

添加一条线

max_allowed_packet = 500

现在重新启动MySQL服务,一旦你完成。

不太可能的情况是,在客户端和服务器之间有一个防火墙,强制TCP重置到连接中。

我遇到了这个问题,我发现我们公司的F5防火墙被配置为终止空闲超过5分钟的非活动会话。

再说一次,这是不太可能发生的情况。