背景

工作中一个Python项目中在连接mysql 时使用mysql.connector.pooling,实际使用中发现个别的数据库一段时间后连接全部断开
没有任何的预兆和错误。后来发现是由于mysql的8小时超时问题

关于mysql.connector.pooling

以下是我们自己实现的数据连接池类中的代码
···

    res["host"] = self._host    res["port"] = self._port    res["user"] = self._user    res["password"] = self._password    res["data "] = self._data     self.dbconfig = res    pool = mysql.connector.pooling.MySQLConnectionPool(        pool_name=pool_name,        pool_size=pool_size,        pool_reset_session=True,        **self.dbconfig)

···
定位到该问题时是因为在一次调用过程中 报错说连接池已经枯竭,一开始感觉不可思议,
于是定时在mysql服务器上

mysql   -e  "show  processlist"

发现每天夜里一定时间连接就会消息,观察时间才直到是因为8小时超时,因为此连接的都是一些查询任务,
而他们一般是业务后台使用,下班之后导致连接处于sleep状态太久

问题知道了,更让我疑惑的是难道python 的这个库没有做这件事情?事实情况就是如此,需要我们自己实现
解决的办法很简单 就是每次在获取连接的时候判断当前的连接数,不足是就重新创建

        size =  self.pool._pool_size        qsize =   self.pool._cnx_queue.qsize()        if qsize < size:            need_add_size =  size - qsize            for  x in range(need_add_size):                self.pool.add_connection()
收藏 打印