我的 django 中不断出现 2006 错误(服务器消失),这是为什么?
There is a 2006 error( server gone away) continously in my django, why is it?
我的配置中没有设置变量CONN_MAX_AGE,据说默认为0,这意味着每个请求都会重新打开一个新的connection.But在我的程序中它不断显示错误(2006,服务器消失),因为每个查询 starts.I 都不知道为什么。
你并不孤单。自 1.6 以来,这一直是一个已知问题,我相信仍然存在。 (很高兴被纠正)。与问题相关的原始文档 from the Django Project.
大体上,我会重新配置您的问题,以便您定期打开一个新的数据库连接。我们有许多连接到 MySQL 的长 运行ning 进程,我们发现这是一个反复出现的问题。
你有三个选择。
稍微分解您的函数,以便每个块都可以建立自己的连接。这应该是您所描述的设置的隐式行为,但我也 运行 遇到了问题。
从 django 导入数据库
for thing in some_data:
db.connections.close_all()
your_stuff_here()
连接的显式关闭(以及随后的重新打开)也比隐式行为更清晰,这也取决于您的 MySQL 超时配置方式。
一个非常 hacky 的解决方法是将您的内部函数包装在 try/except 中:
from django.db.utils import OperationalError
try:
stuff = Stuff.objects.get(id=123456)
except OperationalError:
from django.db import connections
c = connections['default'].cursor()
stuff = Stuff.objects.get(id=123456)
这绝对有效,因为游标连接在发生故障时会重新打开它。尽管我将其实施为对我们的一个漫长 运行ning 流程的修复,但它绝对是一个 hack。我不推荐它,我们随后将其重构为第一种方法。
最后,您可以提高 MySQL 超时时间,django 文档页面上将其列为不太理想的解决方案。
我的配置中没有设置变量CONN_MAX_AGE,据说默认为0,这意味着每个请求都会重新打开一个新的connection.But在我的程序中它不断显示错误(2006,服务器消失),因为每个查询 starts.I 都不知道为什么。
你并不孤单。自 1.6 以来,这一直是一个已知问题,我相信仍然存在。 (很高兴被纠正)。与问题相关的原始文档 from the Django Project.
大体上,我会重新配置您的问题,以便您定期打开一个新的数据库连接。我们有许多连接到 MySQL 的长 运行ning 进程,我们发现这是一个反复出现的问题。
你有三个选择。
稍微分解您的函数,以便每个块都可以建立自己的连接。这应该是您所描述的设置的隐式行为,但我也 运行 遇到了问题。
从 django 导入数据库
for thing in some_data:
db.connections.close_all()
your_stuff_here()
连接的显式关闭(以及随后的重新打开)也比隐式行为更清晰,这也取决于您的 MySQL 超时配置方式。
一个非常 hacky 的解决方法是将您的内部函数包装在 try/except 中:
from django.db.utils import OperationalError
try:
stuff = Stuff.objects.get(id=123456)
except OperationalError:
from django.db import connections
c = connections['default'].cursor()
stuff = Stuff.objects.get(id=123456)
这绝对有效,因为游标连接在发生故障时会重新打开它。尽管我将其实施为对我们的一个漫长 运行ning 流程的修复,但它绝对是一个 hack。我不推荐它,我们随后将其重构为第一种方法。
最后,您可以提高 MySQL 超时时间,django 文档页面上将其列为不太理想的解决方案。