我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
当前回答
我也遇到了这个错误。但是,即使增加了max_allowed_packet或my.cnf中的任何值,错误仍然存在。
我所做的是对我的数据库进行故障排除:
我检查了错误持续存在的表 然后我检查了每一行 有些行可以读取,有些行错误只会显示 似乎这些行中存在导致此错误的值 但是,即使只选择主列,错误仍然会出现(SELECT primary_id FROM table)
我想到的解决方案是重新导入数据库。好在我有这个数据库的备份。但是我只是删除了有问题的表,然后导入了这个表的备份。这解决了我的问题。
我对这个问题的看法是:
始终有数据库备份。手动或通过CRON作业 我注意到在受影响的行中有一些特殊字符。因此,当我恢复该表时,我立即将该表的排序规则从latin1_swedish_ci更改为utf8_general_ci 在我的数据库工作正常之前,我的系统突然遇到这个问题。也许这也与我们的主机提供商升级MySQL数据库有关。所以经常备份是必须的!
其他回答
此错误是由于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
发生这种错误主要有两个原因。
你的内存太小了。 尝试连接时,数据库连接将被关闭。
您可以尝试下面的代码。
# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
try:
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
except (AttributeError, MySQLdb.OperationalError):
self.__init__()
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
不管背后的原因是什么,它都能减轻错误,尤其是第二个原因。
如果是由低RAM引起的,则必须从代码或数据库配置提高数据库连接效率,或者仅仅提高RAM。
在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
让我头疼了一段时间,直到我发现这个。希望能有所帮助。
检查Mysql服务器的日志总是一个好主意,因为它消失的原因。
它会告诉你的。
如果你使用xampp服务器:
打开xampp -> mysql -> bin -> my.ini
参数如下:
max_allowed_packet = 500M
innodb_log_file_size = 128M
这对我帮助很大:)