Помимо тайм-аута: что может вызвать ошибку «Сервер MySQL ушел»? - PullRequest
0 голосов
/ 14 июня 2019

есть читать на эту тему, и я сделал.Я не могу заставить это работать на всю жизнь.

У меня есть приложение Flask, состоящее из нескольких чертежей, каждый из которых использует одну или две разные базы данных на сервере MariaDB.Все чертежи следуют этому шаблону:

from .. import common
Session = common.mysql_sessionmaker("stammdaten")

@blp.route('/login', methods=["POST"])
def login_form():
    db = Session()

Функция mysql_sessionmaker в ..common выглядит следующим образом:

def mysql_sessionmaker(dbname):
    engine = create_engine(
        "mysql://dham@localhost" + '/' \
            + dbname + '?charset=utf8mb4',
            pool_recycle=60,
            pool_pre_ping=True)
    return scoped_session(sessionmaker(engine))

Так что я использовал все советы и хитрости, которые я мог найти по этому поводупроблема:

  • Сокращение pool_recycle с первоначально 1800 до смехотворно короткого времени
  • use pool_pre_ping
  • использование scoped_session ()

Но длябезрезультатно.Конечно, я не могу воспроизвести эту ошибку.Это довольно низкочастотный сайт в интранете компании (несколько десятков звонков в день), и всякий раз, когда я его использую, он отлично работает.Но каждое утро я проверяю логи apache, чтобы найти скрининг огромных дампов стека Python из глубины SQLAlchemy.

В своем отчаянии я даже пытался переместить весь код установки базы данных в функцию @before_request, чтобы каждыйзапрос будет начинаться полностью с нуля.Все та же ошибка.

Куча PHP-скриптов на одном сервере вообще не имеет проблем с базой данных.

Сервер mariadb - это готовая установка RedHat, версия 5.50,56.Я не использую flask-sqlalchemy, потому что я не понимаю, что он делает, и потому что он не поддерживает несколько соединений с базой данных (последний раз, когда я проверял).

[EDIT] Ошибка не вызвана чрезмернымдлинные запросы.Когда я повторно пробую оскорбительные запросы, они возвращаются менее чем за секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...