Ошибка пилонов - "Сервер MySQL исчез"
Вопрос
Я использую Pylons (фреймворк python) для обслуживания простого веб-приложения, но, похоже, оно время от времени умирает, и это указано в журнале ошибок: (2006, 'MySQL server has gone away')
Я немного проверил и увидел, что это произошло из-за того, что соединения с MySQL не обновлялись.Однако это не должно быть проблемой, потому что sqlalchemy.pool_recycle
в конфигурационном файле он должен автоматически сохраняться в рабочем состоянии.Значение по умолчанию было 3600
, но я снова набрал его по адресу 1800
из-за этой проблемы.Это немного помогло, но 3600
следует все будет в порядке, согласно документам.Ошибки по-прежнему случаются полурегулярно.Однако я не хочу слишком сильно снижать его и использовать свою собственную базу данных :).
Может быть, что-то в моей конфигурации MySQL не так?Не уверен, где именно искать.
Другие важные детали:
Python 2.5
Pylons: 0.9.6.2 (w/ sql_alchemy)
MySQL: 5.0.51
Решение
Я думаю, что я это исправил.Оказывается, у меня произошла простая ошибка конфигурации.Мой ini-файл прочитан:
sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800
Проблема в том, что мой environment.py
файл объявил, что движок будет сопоставлять ключи только с префиксом: sqlalchemy.default
итак pool_recycle
был проигнорирован.
Решение состоит в том, чтобы просто изменить вторую строку в ini на:
sqlalchemy.default.pool_recycle = 1800
Другие советы
Возможно, вы захотите проверить переменные тайм-аута MySQL:
show variables like '%timeout%';
Вас, вероятно, интересует wait_timeout
(менее вероятно, но возможно: interactive_timeout
).В Debian и Ubuntu значения по умолчанию равны 28800 (MySQL отключает соединения через 8 часов), но, возможно, значение по умолчанию для вашей платформы другое или тот, кто администрирует сервер, настроил все по-другому.
УГРОЗА, pool_recycle
на самом деле соединения не поддерживаются, срок их действия истекает сам по себе, прежде чем MySQL их уничтожит.Я не знаком с пилонами, но если заставить соединения периодически выполнять SELECT 1;
это вариант, который сохранит их работоспособность практически за счет отсутствия нагрузки на сервер и минимального сетевого трафика.Одна последняя мысль:вам каким-то образом удается использовать соединение, срок действия которого, по мнению pylons, истек?