Ошибка пилонов - «сервер 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
11.08.2008 19:59:32
Я получил эту ошибку после того, как написанный мной скрипт вышел из AWOL и одновременно вставил 10000 строк в таблицу. Мне показалось, что это безопасно - не уверен, относится ли это к вашей проблеме ...
Andrew G. Johnson 11.08.2008 20:24:33
2 ОТВЕТА

Вы можете проверить переменные тайм-аута MySQL:

show variables like '%timeout%';

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

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

2
4.11.2011 11:33:54
Я не могу сказать наверняка; Я пока недостаточно хорошо знаком с внутренностями Pylons. У меня еще не было возможности просмотреть документацию (занят, занят). Я не думаю, что ВЫБЕРИТЕ 1; вещь вариант, хотя, кажется, немного глупо :).
swilliams 19.08.2008 23:06:32
РЕШЕНИЕ

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

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

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

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

sqlalchemy.default.pool_recycle = 1800
7
5.09.2008 18:07:50
Совсем недавно видел трафик на этот пост. Следует отметить, что этот вопрос касался пилонов 0.9.6. Об этом следует позаботиться в Pylons 0.9.7, и свойство sqlalchemy.default исчезает в пользу простого
swilliams 22.02.2010 19:32:43