Вопрос

Я использую 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, истек?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top