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

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

2006, MySQL server has gone away

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


当前回答

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

它会告诉你的。

其他回答

我遇到过这种情况很多次,我通常发现答案是max_allowed_packet的默认设置非常低。

在/etc/my.cnf(在[mysqld]下)中将它提升到8或16M通常可以修复它。(MySql 5.7的默认值是4194304,也就是4MB。)

[mysqld]
max_allowed_packet=16M

注意:如果该行不存在,只需创建该行

注意:这可以在服务器运行时设置。

注意:在Windows上,您可能需要使用ANSI而不是UTF-8编码保存my.ini或my.cnf文件。

使用set global max_allowed_packet=104857600。这将它设置为100MB。

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

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

这可能是.sql文件大小的问题。

如果您正在使用xampp。打开xampp控制面板->单击MySql配置->打开my.ini。

增加数据包大小。

max_allowed_packet = 2M -> 10M

在我的情况下,它是低值的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

对于使用XAMPP的用户,在C:\ XAMPP \mysql\bin\my.ini中有2个max_allowed_packet参数。