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

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

2006, MySQL server has gone away

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


当前回答

此错误是由于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

其他回答

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

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

错误: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。

如果你使用xampp服务器:

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

参数如下:

max_allowed_packet = 500M

innodb_log_file_size = 128M

这对我帮助很大:)

在我的情况下,它是低值的open_files_limit变量,这阻止了mysqld访问数据文件。

我用:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

在我将变量改为大值后,我们的服务器再次活跃起来:

[mysqld]
open_files_limit = 100000

如果你知道你要离线一段时间,你可以关闭连接,进行处理,重新连接并撰写报告。