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

原文地址:https://www.cnblogs.com/cuitang/p/15102005.html