pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection

Posted

技术标签:

【中文标题】pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, \'Connection timed out\'))")【英文标题】:pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))") 【发布时间】:2020-07-19 07:26:43 【问题描述】:

如果遇到任何错误,我的问题是关于重新连接到 mysql 服务器。

我正在连接到 Flask 中的 MySQL 服务器:

connection = pymysql.connect(host='host',
                             user='user',
                             connect_timeout= 31536000,
                             password='passwd',
                             db='db_name',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

对于使用游标的查询也是如此: Flask 路由代码:

@app.route("/chart", methods=['GET', 'POST'])
def chart():
    try:
        with connection.cursor() as cursor:
        #line chart open tickets
        query = "select createdDate,rootCause,requestId from db_name;"
        df = pd.read_sql(query, connection)
        print(df)

    except pymysql.MySQLError as e:
        print(e)

当我收到错误时,我想重新连接到数据库:

pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")

请帮我找到这个错误的解决方案。

遇到任何错误时如何重新连接到数据库。

提前致谢!

【问题讨论】:

【参考方案1】:

看起来您一直在使用单个连接。尝试每次创建一个新连接,并在运行所需的查询后关闭它。 通过这个可以避免这个问题。

【讨论】:

【参考方案2】:

在调用create_engine() 时设置pool_pre_ping=True 似乎对我有很大帮助。

例子:

engine = create_engine(db_connection, pool_pre_ping=True)

来自SQLAlchemy docspool_pre_ping

“如果 True 将启用连接池“pre-ping”功能,该功能会在每次结帐时测试连接的活跃度。”

【讨论】:

以上是关于pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection的主要内容,如果未能解决你的问题,请参考以下文章