Python大约一天后失去与MySQL数据库的连接

问题描述 投票:0回答:1

我正在使用Python,Flask,MySQL和uWSGI开发基于Web的应用程序。但是,我not使用SQL Alchemy或任何其他ORM。我正在使用一个旧的PHP应用程序中的一个预先存在的数据库,该数据库无论如何都不能与ORM很好地配合,所以我只是使用mysql-connector并手动编写查询。

当我第一次启动该应用程序时,它可以正常运行,但是第二天早上回来时,我发现它已损坏。我会收到类似mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query或类似的mysql.connector.errors.OperationalError: 2055: Lost connection to MySQL server at '10.0.0.25:3306', system error: 32 Broken pipe的错误。

我一直在研究它,我想我知道问题出在哪里。我只是没有找到一个好的解决方案。尽我所能,问题是我保持对数据库连接的全局引用,并且由于Flask应用程序始终在服务器上运行,因此该连接最终会失效并变得无效。

我想为每个查询创建一个新的连接就足够简单了,但这似乎不是理想的解决方案。我想我也可以建立某种连接缓存机制,该机制将在一个小时左右后关闭旧连接,然后重新打开它。这是我能够提出的最佳选择,但我仍然觉得应该有一个更好的选择。

我环顾四周,大多数收到这些错误的人的表很大或损坏了,或者有某种程度的影响。这里情况不同。旧的PHP应用程序仍然可以正常运行,所有表的行数少于50,000,少于30列,而Python应用程序运行良好,直到运行了大约一天。

因此,希望有人能够为保持与MySQL数据库的持续开放连接提供良好的解决方案。或者,如果我希望有人知道的话,也许我正在完全吠错树。

python mysql flask mysql-python mysql-connector-python
1个回答
0
投票

我现在正在工作。使用共用连接似乎可以解决此问题。

mysql.connector.connect(
    host='10.0.0.25',
    user='xxxxxxx', 
    passwd='xxxxxxx', 
    database='xxxxxxx',
    pool_name='batman',
    pool_size = 3
)

def connection():
    """Get a connection and a cursor from the pool"""
    db = mysql.connector.connect(pool_name = 'batman')
    return (db, db.cursor())

我在每个查询功能之前调用connection(),然后在返回之前关闭游标和连接。似乎可以工作。仍然有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.