文章内容
2019/6/21 11:32:55,作 者: 黄兵
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '10.0.2.5' (110)")
最近使用MySQLdb连接数据库,每天报错,具体内容如下:
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '10.0.2.5' (110)")
我找了一下大部分说的是localhost
和127.0.0.1
的相关问题,但是我这边MySQL数据库不是在本机,在内网的其他机器,所以说不存在上面所说的问题。
但是每天报错,我给腾讯云发了工单,他们的回复等于没说:
让我在正式项目上抓包,这不是找死吗,过不了几个小时,估计包文件就要把硬盘撑爆。
而且出现问题的时间不固定,这个怎么抓,真是不负责任的回答。
我在这里认为他是连接数据库失败,也就是无法连接数据库,那就需要我们在连接的相关代码加入重试功能,在连接失败后,重试。
在网上找了一下,有一个不错的包:retrying
具体可以参考这篇文章:Python之retrying
简化了向几乎任何事情添加重试行为的任务。
也就是不需要你重复编写重连接代码,这个实在是太方便了。
具体用法可以看官方文档和上面的参考文章。
在此,我的代码如下:
@retry(stop_max_attempt_number=10, wait_fixed=2) def Conn_MySQL(self): """连接MySQL数据库 链接失败,重试10次,每次间隔2s""" # 打开数据库连接 db = MySQLdb.connect(host=self.mysql_host, port=self.mysql_port, user=self.mysql_user, passwd=self.mysql_password, db=self.mysql_database, charset=self.charset) return db
上面已经加了注释,不多说。
还需要观察看看是不是由于无法连接导致的问题。
看看后面还是不是继续报错。
参考资料:
1、retrying
黄兵个人博客原创。
评论列表