在 Python 中使用 PyMysql 连接 MariaDB 时出现问题

Posted

技术标签:

【中文标题】在 Python 中使用 PyMysql 连接 MariaDB 时出现问题【英文标题】:Problem connecting MariaDB using PyMysql in Python 【发布时间】:2019-09-15 07:54:53 【问题描述】:

我有一个与 MariaDB database in a Docker container 连接的 Flask Python API,我正在使用 Pymysql 连接到数据库。

问题是我的服务器或应用程序在 10 分钟后关闭了连接。 我已经尝试在 MariaDB 配置文件和 PyMySQL 中增加超时时间,但无济于事。错误如下:

Python 错误:

"OperationalError: (2006, "MySQL server has gone away 
(ConnectionResetError(104, 'Connection reset by peer'))")"

数据库错误:

"[Warning] Aborted connection 9 to db: 'db' user: 'user' host: 'ip'
(Got timeout reading communication packets)"

有人知道如何解决这个问题吗?

我在下面给出了我的 MariaDB 配置文件和我的 Python 代码。

提前谢谢你。

PS:我已经尝试使用另一个 Python 包连接到 MariaDB,即通过 Flask SQLAlchemy,但不幸的是,同样的行为发生在数据库连接上。 出于这个原因,我认为问题不在于 Python 代码,而可能是 Docker 镜像(也许)。

my.cnf

# 7 days = 604800s / 8 hours = 28800s 
wait_timeout = 604800
interactive_timeout = 28800

Python 代码:

from pymysql import connect
from pymysql.cursors import DictCursor


class MySQLConnection:

    def __init__(self, host, port, user, password, schema):       
        try:
            # Connect to the database
            self.connection = connect(host=host, port=port, 
                                      user=user, password=password, 
                                      db=schema, cursorclass=DictCursor, 
                                      connect_timeout=50)

            # create a cursor object
            self.cursor = self.connection.cursor()
            print("DB connection was successful!")
        except Exception as error:
            print("DB connection was failed! \nError: ", error)
            exit(1)

【问题讨论】:

【参考方案1】:

https://docs.sqlalchemy.org/en/13/faq/connections.html#mysql-server-has-gone-away

也许你需要pool_recyclepool_pre_ping :)

【讨论】:

以上是关于在 Python 中使用 PyMysql 连接 MariaDB 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 PyMysql 连接 MariaDB 时出现问题

Python学习笔记-pyMySQL连接MySQL数据库

在python中使用pymysql连接数据库

pymysql连接mysql报错

Python连接MySQL数据库之pymysql模块使用

Python mysql(使用pymysql)自动重新连接