Ошибка Pylons – «Сервер MySQL ушел»

[Надеюсь, это не слишком неясно … Я спрошу группу новостей, если никто не знает здесь]

Я использую Pylons (фреймворк python), чтобы служить простому веб-приложению, но, похоже, время от времени умирает, причем это в журнале ошибок: (2006, 'MySQL server has gone away')

Я немного проверил и увидел, что это связано с тем, что соединения с MySQL не обновлялись. Это не должно быть проблемой, потому что sqlalchemy.pool_recycle в файле конфигурации должен автоматически поддерживать его. По умолчанию было 3600 , но я набрал его до 1800 из-за этой проблемы. Это помогло немного, но 3600 должно быть в порядке в соответствии с документами. Ошибки все еще происходят полу-регулярно. Я не хочу слишком сильно его понижать, а DOS – моя собственная база данных :).

Может быть, что-то в моей конфигурации MySQL тупой? Не уверен, где искать.

Другие релевантные детали:

  Python 2.5 Pylons: 0.9.6.2 (w/ sql_alchemy) MySQL: 5.0.51 

2 Solutions collect form web for “Ошибка Pylons – «Сервер MySQL ушел»”

Думаю, я это исправил. Оказывается, у меня была простая ошибка конфигурации. Мой файл ini читал:

 sqlalchemy.default.url = [connection string here] sqlalchemy.pool_recycle = 1800 

Проблема в том, что мой файл environment.py заявил, что движок будет отображать только ключи с префиксом: pool_recycle поэтому pool_recycle был проигнорирован.

Решение состоит в том, чтобы просто изменить вторую строку в ini:

 sqlalchemy.default.pool_recycle = 1800 

Возможно, вы захотите проверить переменные времени ожидания MySQL:

 show variables like '%timeout%'; 

Вероятно, вас интересует wait_timeout (менее вероятно, но возможно: interactive_timeout ). В Debian и Ubuntu значения по умолчанию – 28800 (MySQL убивает соединения через 8 часов), но, возможно, по умолчанию для вашей платформы разные, или тот, кто администрирует сервер, настроил что-то по-другому.

AFAICT, pool_recycle фактически не поддерживает связь, он истекает сам по себе, прежде чем MySQL их убьет. Я не знаком с пилонами, но если вы вызываете соединения с перерывами, сделайте SELECT 1; это вариант, который будет поддерживать их при стоимости, в основном, без нагрузки на сервер и минимального сетевого трафика. Одна заключительная мысль: вы каким-то образом можете использовать соединение, которое полагает, что оно истекло?

  • Как вернуть данные из запроса MySQL в приложении Flask?
  • Использование Python быстро вставляет много столбцов в Sqlite \ Mysql
  • Преобразование строки Python DateTime в целые миллисекунды
  • Как я могу изменить время ожидания соединения Mysql по умолчанию при подключении через python?
  • Получение и отображение изображений BLOB из базы данных Mysql с помощью Tkinter
  • Могут ли модели Django использовать функции MySQL?
  • Данные MySQL INSERT не сохраняются в надлежащем db, но только временно?
  • Ошибка SQLAlchemy Сервер MySQL ушел
  • Python - лучший язык программирования в мире.