我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程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。
其他回答
对于使用XAMPP的用户,在C:\ XAMPP \mysql\bin\my.ini中有2个max_allowed_packet参数。
如果你知道你要离线一段时间,你可以关闭连接,进行处理,重新连接并撰写报告。
在MAMP(非专业版)中我添加了
--max_allowed_packet=268435456
到 ...\MAMP\bin\startMysql.sh
更多细节请点击这里
在我的情况下,它是低值的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,有一种更简单的方法。 打开XAMPP控制面板,单击mysql部分中的config按钮。
现在点击my.ini,它将在编辑器中打开。将max_allowed_packet更新为所需的大小。
然后重新启动mysql服务。在Mysql服务上单击stop,再次单击start。等几分钟。
然后再次运行Mysql查询。希望它能起作用。