1. 程式人生 > 實用技巧 >Django Lost connection to MySQL server during query

Django Lost connection to MySQL server during query

實際的原因在於mysql 設定的timeout大於你的指令碼執行時間,導致django的查詢超時。

登入mysql可以檢視mysql wait_timeout:

SHOW GLOBAL VARIABLES;

django為了減少不必要的資料庫連線、關閉,複用了資料庫連線,當開始一個請求後建立一個連線池存放連線,之後此次請求都複用一個連線。那猜測就是django儲存連線的比wait_timeout長了,如果儲存時間短一些就可以重新建立連線避免此錯誤了。
沒錯,官方文件也已經說明了此問題,設定資料庫 CONN_MAX_AGE引數,示例:

DATABASES = {
    "default"
: { 'ENGINE': 'django.db.backends.mysql', 'NAME': '', 'USER': '', 'PASSWORD': '', 'HOST': '', 'CONN_MAX_AGE': 9 # 比wait_timeout小一些 } }

但是有的時候需要執行非常耗時的job,這種方式是行不通的。

解決方案:

再查詢之前加入:

django.db.close_old_connections