Ошибка 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;
- это вариант, который будет поддерживать их в живых, без затрат на сервер и минимального сетевого трафика. Одна заключительная мысль: вы каким-то образом управляете связью, которая, по мнению пилонов, истекла?