Ошибка Pylons - "Сервер MySQL ушел"

Я использую Pylons (Python Framework) для обслуживания простого веб-приложения, но, похоже, время от времени он умирает, и это в журнале ошибок: (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

Ответы

Ответ 1

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

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

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

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

sqlalchemy.default.pool_recycle = 1800

Ответ 2

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

show variables like '%timeout%';

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

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