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

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

2006, MySQL server has gone away

我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程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

取消my.ini/my.cnf中下面的ligne的注释,这将把你的大文件分割成小部分

# binary logging format - mixed recommended
# binlog_format=mixed

TO

# binary logging format - mixed recommended
binlog_format=mixed

我在MySQL命令行中使用了以下命令来恢复一个超过7GB的MySQL数据库,它是有效的。

set global max_allowed_packet=268435456;

我的问题是我为生产连接添加了SSL配置,这破坏了我的本地环境。很简单,但可能会帮助其他人意识到他们的问题。

造成这个错误的原因有几个。

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 有关错误的更多信息,请查看文档