• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在我的Django中有一个2006年的错误(服务器消失了),为什么?

mysql 来源:Xiaolin Wu 35次浏览

我没有在我的配置中设置变量CONN_MAX_AGE,据说它将默认为0,这意味着每个请求都会重新打开一个新的连接。但在我的程序中,它不断显示错误(2006年,服务器消失)因为每个查询开始。我​​不知道为什么。在我的Django中有一个2006年的错误(服务器消失了),为什么?


===========解决方案如下:

你并不孤单。这是自1.6以来已知的问题,我相信依然存在。 (很高兴能够纠正)。与该问题有关的原始文档from the Django Project.

大致上,我会重新配置您的问题,以便您定期打开新的数据库连接。我们有很多连接到MySQL的长时间运行的进程,并发现这是一个经常性问题。

您有三种选择。

稍微分开你的功能,以便块可以建立自己的连接。这应该是你所描述的设置的隐含行为,但我也遇到了问题。

从连接的Django的进口分贝

for thing in some_data: 
    db.connections.close_all() 
    your_stuff_here() 

显式关闭(以及随后的重启)也比隐的行为,这也取决于你的MySQL超时是如何配置的清晰。

一个非常哈克解决方法是来包装你的内部函数在try /除外:

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) 

这绝对有效,当光标连接重新打开它在发生故障的事件。虽然我将它作为我们长期运行的进程中的一个修复程序实施,但这绝对是一种破解。我不推荐它,我们随后将它重构为第一种方法。

最后,您可能会升高MySQL超时,这在django文档页面中提到的是一个不太理想的解决方案。

https://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)