#mysql #sqlalchemy #flask-sqlalchemy
#mysql #sqlalchemy #flask-sqlalchemy
Вопрос:
Я пытаюсь разобраться с проблемой «сервер MySQL ушел». Я прочитал эту статью и включил опцию pool_pre_ping в конфигурации моего приложения Flask:
SQLALCHEMY_DATABASE_URI = 'mysql mysqldb://user:password@localhost/test?unix_socket=/var/run/mysqld/mysqld.sock'
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_pre_ping': True,
'pool_recycle': 280,
'pool_size': 100
}
Однако я все еще получаю проблему «Сервер MySQL ушел».
Я установил значения wait_timeout и interactive_timeout равными 30 в конфигурации сервера MySQL и включил общий журнал MySQL. Теперь посмотрите, что каждый запрос к приложению начинается с app, который устанавливает соединение с сервером MySQL. Однако на сервер не выдается ping («ВЫБЕРИТЕ 1»).
Я увеличил wait_timeout до 300 секунд и теперь вижу, что каждый HTTP-запрос (в течение периода ожидания) не вызывает соединений, но также не вызывает и ping. Вместо этого первый запрос к MySQL запрашивает пользователя (вероятно, потому, что функция просмотра требует, чтобы пользователь вошел в систему).
Поэтому я не уверен, что этот параметр pool_pre_ping вообще работает. Это ожидаемое поведение для SQLAlchemy в MySQL?