我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
当前回答
造成这个错误的原因有几个。
MySQL / MariaDB相关:
wait_timeout—服务器在关闭连接之前等待连接激活的时间(以秒为单位)。 interactive_timeout—服务器等待交互连接的时间(以秒为单位)。 max_allowed_packet -数据包或生成/中间字符串的最大字节数。设置为最大的BLOB大小,为1024的倍数。
my.cnf的示例:
[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M
服务器相关:
你的服务器有完整的内存-用free -h检查内存信息
框架相关:
检查框架的设置。以Django为例,使用CONN_MAX_AGE(参见docs)
如何调试它:
检查MySQL/MariaDB变量的值。 使用sql:显示变量'%time%'; 命令行:mysqladmin变量 为错误打开verbose: MariaDB: log_warnings = 4 MySQL: log_error_verbosity = 3 有关错误的更多信息,请查看文档
其他回答
我在DigitalOcean Ubuntu服务器上也出现了同样的错误。
我尝试改变max_allowed_packet和wait_timeout设置,但他们都没有修复它。
原来我的服务器内存不足。我添加了一个1GB的交换文件,这解决了我的问题。
用free -h检查你的内存,看看这是否是导致它的原因。
不太可能的情况是,在客户端和服务器之间有一个防火墙,强制TCP重置到连接中。
我遇到了这个问题,我发现我们公司的F5防火墙被配置为终止空闲超过5分钟的非活动会话。
再说一次,这是不太可能发生的情况。
如果你知道你要离线一段时间,你可以关闭连接,进行处理,重新连接并撰写报告。
如果你使用xampp服务器:
打开xampp -> mysql -> bin -> my.ini
参数如下:
max_allowed_packet = 500M
innodb_log_file_size = 128M
这对我帮助很大:)
我在Ubuntu桌面上的不同MySQL客户端软件中得到了2006年错误消息。原来我的JDBC驱动程序版本太旧了。