我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程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。

其他回答

我的问题是我为生产连接添加了SSL配置,这破坏了我的本地环境。很简单,但可能会帮助其他人意识到他们的问题。

在MAMP(非专业版)中我添加了

--max_allowed_packet=268435456

到 ...\MAMP\bin\startMysql.sh

更多细节请点击这里

在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

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

我在Ubuntu桌面上的不同MySQL客户端软件中得到了2006年错误消息。原来我的JDBC驱动程序版本太旧了。

发生这种错误主要有两个原因。

你的内存太小了。 尝试连接时,数据库连接将被关闭。

您可以尝试下面的代码。

# 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。