pymysql 處理 連線超時最好的解決方案

ponponon發表於2021-10-07

錯誤型別

在用mysql客戶端對資料庫進行操作時,開啟終端視窗,如果一段時間沒有操作,再次操作時,常常會報如下錯誤:

  • ERROR 2013 (HY000): Lost connection to MySQL server during query
  • ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect...

好的,讓我們看看這兩個錯誤對應 pymysql 中的異常型別吧

2013 錯誤碼對應的是什麼異常型別?

先看第一個 2013 對應的異常型別
constants/CR.py

CR_SERVER_LOST = 2013

connections.py

raise err.OperationalError(
    CR.CR_SERVER_LOST,
    "Lost connection to MySQL server during query",
)

可以看到對應的錯誤型別是 OperationalError

2006 錯誤碼對應的是什麼異常型別?

再看第二個 2006 對應的異常型別
constants/CR.py

CR_SERVER_GONE_ERROR = 2006

connections.py

raise err.OperationalError(
    CR.CR_SERVER_GONE_ERROR, "MySQL server has gone away (%r)" % (e,)
)

可以看到對應的錯誤型別是 OperationalError

operational 是什麼意思?

看看 有道翻譯 中的解釋吧

operational
英 [ˌɒpəˈreɪʃənl] 美 [ˌɑːpəˈreɪʃənl]
adj. (機器、裝置等)正常運轉的,可使用的;操作的,運營的,業務的;軍事行動的;操作論的,操作主義的

從這個翻譯來看,這個異常類是一個很寬泛的異常類

參考文章:

MySQL中interactive_timeout和wait_timeout的區別
[玩轉 MySQL 之二]MySQL 連線機制淺析及運維
MySQL資料庫連線超時自動斷開的解決方案

相關文章