Python中 mysql.connector.pooling的8小时超时问题

  1. 云栖社区>
  2. 博客>
  3. 正文

Python中 mysql.connector.pooling的8小时超时问题

小邓在路上 2019-07-04 18:21:54 浏览317
展开阅读全文

背景

工作中一个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["database"] = self._database
    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()

网友评论

登录后评论
0/500
评论
小邓在路上
+ 关注