MySQLdb 不活跃连接自动断开的解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQLdb 不活跃连接自动断开的解决方法相关的知识,希望对你有一定的参考价值。

问题:

通过mysqldb 连接mysql,如果长时间不活动,会被mysql断开,再次请求的时候会导致抛出异常"_mysql_exceptions.OperationalError: (2006, ‘MySQL server has gone away‘)"

原因:

这是因为mysql有两个参数来自动断开不活跃的连接,MySQLdb的连接超过这个时间后就会被mysql自动断开。

interactive_timeout
wait_timeout

可以登陆mysql 执行show global variables like "%timeout%" 进行查看

解决办法:

办法一:

修改mysql的配置,对上面两个参数进行修改

办法二:

使用conn的ping()方法进行重新连接

conn = MySQLdb.conn(xxxxx)
conn.ping(True)

ping(...)
    Checks whether or not the connection to the server is
    working. If it has gone down, an automatic reconnection is
    attempted.

    This function can be used by clients that remain idle for a
    long while, to check whether or not the server has closed the
    connection and reconnect if necessary.

    New in 1.2.2: Accepts an optional reconnect parameter. If True,
    then the client will attempt reconnection. Note that this setting
    is persistent. By default, this is on in MySQL<5.0.3, and off
    thereafter.

    Non-standard. You should assume that ping() performs an
    implicit rollback; use only when starting a new transaction.
    You have been warned.

以上是关于MySQLdb 不活跃连接自动断开的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

如何解决SSH连接Linux超时自动断开

解决SSH连接linux时长时间不操作自动断开

SSH自动断开处理

SecureCRT 超时自动断开的解决方法

oralce 断连后不自动断开问题

SSH连接自动断开的解决方法(deb/rpm)