我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程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驱动程序版本太旧了。
其他回答
错误:2006 (CR_SERVER_GONE_ERROR)
消息:MySQL服务器已经消失了
通常,您可以重试连接,然后再次执行查询来解决这个问题-在完全放弃之前尝试3-4次。
我假设您正在使用PDO。如果是这样,那么您将捕获PDO异常,增加一个计数器,然后在计数器低于阈值时再次尝试。
如果你有一个导致超时的查询,你可以执行以下命令来设置这个变量:
SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300; -- OR current session only
其中300是您认为查询可能花费的最大时间的秒数。
关于如何处理Mysql连接问题的进一步信息。
编辑:您可能还想使用的另外两个设置是net_write_timeout和net_read_timeout。
我也有同样的问题,但改变my.ini/my.cnf文件下[mysqld]的max_allowed_packet。
添加一条线
max_allowed_packet = 500
现在重新启动MySQL服务,一旦你完成。
发生这种错误主要有两个原因。
你的内存太小了。 尝试连接时,数据库连接将被关闭。
您可以尝试下面的代码。
# 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。
对于Vagrant Box,请确保为该Box分配了足够的内存
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
end
此错误是由于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