zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    GCD的常用代码块
    多用字面量语法,少用与之等价的方法
    新建项目上下出现黑色块
    按钮UIButton的使用
    集成支付宝
    app生命周期之即将关闭
    苹果开发者计划申请材料准备(公司级)
    真机调试的一些问题记录~更新中
    iOS开发架构学习记录
    用枚举值表示状态、选项、状态码
  • 原文地址:https://www.cnblogs.com/cuitang/p/15102005.html
Copyright © 2011-2022 走看看