我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程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 有关错误的更多信息,请查看文档

其他回答

MAMP 5.3,你不会找到my.cnf,添加它们不工作,因为max_allowed_packet存储在变量中。

一种解决方案是:

访问http://localhost/phpmyadmin 转到SQL选项卡 运行SHOW VARIABLES并检查值,如果值小,则运行大值 运行下面的查询,它将max_allowed_packet设置为7gb: 设置全局max_allowed_packet=268435456;

对于某些情况,您可能还需要增加以下值:

set global wait_timeout = 600;
set innodb_log_file_size =268435456;

在windows上,那些使用xampp的人应该使用这个路径xampp/mysql/bin/my.ini,并将max_allowed_packet(在部分[mysqld]下)更改为您选择的大小。 如

max_allowed_packet=8M

再次在php.ini(xampp/php/php.ini)中更改upload_max_filesize选项大小。 如

upload_max_filesize=8M

让我头疼了一段时间,直到我发现这个。希望能有所帮助。

我找到了解决“#2006 - MySQL服务器已经消失”这个错误的方法。 解决办法就是检查两个文件

config.inc.php config.sample.inc.php

这些文件在windows下的路径为

C:\wamp64\apps\phpmyadmin4.6.4

在这两个文件中this的值:

$cfg['Servers'][$i]['host']must be 'localhost' .

我的情况是:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

改为:

"$cfg['Servers'][$i]['host']" = 'localhost';

两方面都要确保:

config.inc.php Config.sample.inc.php文件必须是'localhost'。

最后一组:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

然后重新启动Wampserver。


修改phpmyadmin用户名和密码

可以直接通过config.inc.php文件修改phpmyadmin的用户名和密码

这两条线

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

在这里你可以输入新的用户名和密码。 更改后保存文件并重新启动WAMP服务器。

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

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

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

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

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