Проблема с подключением MariaDB с использованием PyMysql в Python

У меня есть Flask Python API, который подключается к базе данных MariaDB в контейнере Docker, и я подключение к базе данных с помощью PyMysql.

Проблема в том, что мой сервер или приложение закрывает соединение через 10 минут. Я уже пытался увеличить время ожидания в конфигурационном файле MariaDB и в PyMySQL, но безрезультатно. Ошибки следующие:

Ошибка питона:

"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 (возможно).

мой.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)

person rmmariano    schedule 25.04.2019    source источник


Ответы (1)


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

Может быть, вам нужно pool_recycle, pool_pre_ping :)

person Mio    schedule 31.05.2020