python + pymysql連接數據庫報“(2003, "Can't connect to MySQL server on 'XXX數據庫地址' (timed out)")”


python + pymysql連接數據庫報“(2003, "Can't connect to MySQL server on 'XXX數據庫地址' (timed out)")”

前言:

由於項目最近更換了數據庫,導致執行python代碼連接數據庫的時候,出現“超時”或“由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。”,代碼執行失敗了。目前使用的是polardb數據庫(類似mysql)

 

錯誤信息如下:

 

1、 數據庫連接失敗:(2003, "Can't connect to MySQL server on 'XXX數據庫的地址' (timed out)")
2、 (2003, "Can't connect to MySQL server on 'XXX數據庫的地址' ([WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。)")

解決方案:

1、排查了本地端口沖突的問題,連接的遠程的服務器

2、和對應的服務器端工作人員排查,機器網絡正常(可能網絡時好時壞)

3、最后通過加上數據庫重連的機制解決

 

由於是首次遇到這種連接數據庫超時的問題,以前連接數據庫很少會有這種情況,所以原始代碼是不需要重連的,98%概率是成功連接上的

 

    def connect_dbserver(self):
        """
        連接數據庫
        """
        try:
            self.db = pymysql.connect(**self.sql_config)
            self.cursor = self.db.cursor()
        except pymysql.Error as e:
           mylog.error("數據庫連接失敗:{0}".format(e))
    

 

加上重連機制的代碼,失敗了繼續重試,一般都可以連接上數據庫了

    def connect_dbserver(self):
        """
        連接數據庫
        """
        retry_count = 10
        init_connect_count = 0
        connect_res = True
        while connect_res and init_connect_count < retry_count:
            try:
                self.db = pymysql.connect(**self.sql_config)
                self.cursor = self.db.cursor()
                # 連接上退出循環,連接不上繼續重連
                connect_res = False
            except pymysql.Error as e:
                mylog.info("數據庫連接失敗,嘗試重連...,錯誤信息:{0}".format(e))
                init_connect_count += 1

  

參考:https://www.cnblogs.com/fanjp666888/p/8608406.html


免責聲明!

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



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