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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM