我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
当前回答
我在Ubuntu桌面上的不同MySQL客户端软件中得到了2006年错误消息。原来我的JDBC驱动程序版本太旧了。
其他回答
这可能是.sql文件大小的问题。
如果您正在使用xampp。打开xampp控制面板->单击MySql配置->打开my.ini。
增加数据包大小。
max_allowed_packet = 2M -> 10M
我遇到过这种情况很多次,我通常发现答案是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服务器连接问题或超时。 通常可以通过更改my.cnf或类似文件中的wait_timeout和max_allowed_packet来解决。
我建议以下几点:
Wait_timeout = 28800
max_allowed_packet = 8M
我也遇到了这个错误。但是,即使增加了max_allowed_packet或my.cnf中的任何值,错误仍然存在。
我所做的是对我的数据库进行故障排除:
我检查了错误持续存在的表 然后我检查了每一行 有些行可以读取,有些行错误只会显示 似乎这些行中存在导致此错误的值 但是,即使只选择主列,错误仍然会出现(SELECT primary_id FROM table)
我想到的解决方案是重新导入数据库。好在我有这个数据库的备份。但是我只是删除了有问题的表,然后导入了这个表的备份。这解决了我的问题。
我对这个问题的看法是:
始终有数据库备份。手动或通过CRON作业 我注意到在受影响的行中有一些特殊字符。因此,当我恢复该表时,我立即将该表的排序规则从latin1_swedish_ci更改为utf8_general_ci 在我的数据库工作正常之前,我的系统突然遇到这个问题。也许这也与我们的主机提供商升级MySQL数据库有关。所以经常备份是必须的!
我在DigitalOcean Ubuntu服务器上也出现了同样的错误。
我尝试改变max_allowed_packet和wait_timeout设置,但他们都没有修复它。
原来我的服务器内存不足。我添加了一个1GB的交换文件,这解决了我的问题。
用free -h检查你的内存,看看这是否是导致它的原因。