2015-09-07 85 views
1

这个问题是我的确切问题解决方法(2006,'MySQL服务器已经消失')?

Django - OperationalError: (2006, 'MySQL server has gone away')

的aparent工作围绕这一否则未解决的问题是增加wait_timeout为执行

背景

我有芹菜每天在特定时间运行一次的任务。最初它工作正常,但上周我已经开始越来越:

Exception_ocoured_:(2013,“期间 查询到MySQL服务器失去连接”)

这芹菜任务简单地获取从一些细节db,最多4000行,并发送给最终用户。

问:

有什么办法来增加此超时只针对特定的芹菜任务这是面临这个问题在Django的环境,因为我不想打扰本地设置?

我在寻找一个django ish解决方案,只要执行这个芹菜任务,它的生命周期就会一直存在。

对于如:

@task 
def doSomething(): 
    try: 
     set_timeout_for_mysql = 20000 # <== main agenda for this question 
     # OR 
     ping_resp = somehow_test_mysql_con() 
     while(ping_resp == False): 
      keep trying to connect or create new connection 
     # do_operations 
    except Exception, e: 
     # log exception 

规格:

In [18]: django.VERSION 
Out[18]: (1, 7, 7, 'final', 0) 

django-celery==3.0.21 

PS: 其他任何解决办法都行,如果有人已经解决了这个机智豪特扰乱核心设置!

回答

1
from django.db import close_old_connections 

... 
close_old_connections() 
... # do some db jobs, it will reconnect db 

好运

+0

是啊...我迟到了,我知道了! :) – NoobEditor

0

您可以设置每个会话(连接)WAIT_TIMEOUT

set wait_timeout=10000; 
SHOW VARIABLES LIKE 'wait_timeout'; 

但是,你确定错误是从WAIT_TIMEOUT。另一个解决方案是max_allowed_pa​​cket。你可以增加它看看这个问题。

+0

'max_allowed_pa​​cket'这'设置wait_timeout',不知道如果我能我直接在我的芹菜提到这一点'def'还是需要一个单独的实施? – NoobEditor

相关问题