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

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

2006, MySQL server has gone away

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


当前回答

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

添加一条线

max_allowed_packet = 500

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

其他回答

如果你使用xampp服务器:

打开xampp -> mysql -> bin -> my.ini

参数如下:

max_allowed_packet = 500M

innodb_log_file_size = 128M

这对我帮助很大:)

此错误是由于wait_timeout过期引起的。

去mysql服务器检查它的wait_timeout:

mysql>显示wait_timeout这样的变量 Mysql > set global wait_timeout = 600 # 10分钟或最大等待时间 你需要的

http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html

以防这能帮助到任何人:

当我打开和关闭将从应用程序的几个部分调用的函数中的连接时,我得到了这个错误。 我们获得了太多的连接,所以我们认为重用现有的连接或将其丢弃并创建一个新的连接可能是一个好主意,如下所示:

public static function getConnection($database, $host, $user, $password){
    if (!self::$instance) {
        return self::newConnection($database, $host, $user, $password);
    } elseif ($database . $host . $user != self::$connectionDetails) {
        self::$instance->query('KILL CONNECTION_ID()');
        self::$instance = null;
        return self::newConnection($database, $host, $user, $password);
    }
    return self::$instance;
}

事实证明,我们在kill方面做得有点太彻底了,所以在旧连接上做重要事情的进程永远无法完成他们的业务。 所以我们去掉了这些线

self::$instance->query('KILL CONNECTION_ID()');
self::$instance = null;

由于机器的硬件和设置允许,我们增加了服务器上允许的连接数

max_connections = 500

到我们的配置文件。这解决了我们现在的问题,我们学到了一些关于杀死mysql连接。

检查连接是否存在并在需要时重新建立连接可能更容易。

有关这方面的信息,请参阅PHP:mysqli_ping。

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

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

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