При регистрации Drupal может быть следующее.
Описание проблемы:
После отправки своих данных на экране появляется мгновенно несколько одинаковых предупреждений: MySQL server has gone away query. Регистрация проходит успешно.
Ping: cкорость до сервера низкая, пакеты теряются, ping 550ms.
Наблюдается как в версии 6.4 так и до 6.6 (практически во всех версиях). Ошибка выдаётся при записи в таблицу {watchdog}. Причём чаще всего когда открываем страницу "поиск обновлений". В этом момент записывается много данных в логи, т. е. в ту же таблицу watchdog. Очистка этой таблицы не помогает.
Ещё часто такое бывает на таблицах связанных с cache (кэш).
Еще наблюдался случай, когда после начала работы с navigation внизу страницы отображаются подобные предупреждения.
Скриншоты:
Причины:
Ошибка может означать все что угодно:
1) Сервер MySQL по TimeOut неактивности прерывает соединение.
2) Почти во всех версиях при локализации начинает не хватать длины некоторых полей.
Методы решения:
Эта ошибка может обозначать многое и решается по разному (читайте все):
1) Не использовать постоянные соединения; или использовать постоянные соединения + указывать опцию reconnect при подключении; или использовать постоянные соединения, не указывать опцию reconnect, а добавить в config wait_timeout = 1 год
2) По DNS не найден хост.
3) Проблема в том, что используется протокол с компрессией.
4) Пытаемся передать очень большой BLOB от которого MySQL выдает нарушение.
5) Проявляется это обычно в администраторском интерфейсе при «пейджинговом» выводе, т.е. когда в строку URL дописываются параметры типа ?page=..., в этом случае нужно увеличить длину полей в двух табличках: {accesslog} поля url и path (до 420) - тогда хватает,
и в табличке {watchdog} поле referer (до 420). Но теоретически в админке никак не превысить лимит в 255 символов, - остальное обрезается.
6) Предлагаем увеличивать max_allowed_packet для MySQL, другие настройки... Но не все могут управлять настройками mysql (на пример у тех, у кого shared hosting).
7) Можно заметить, что ошибка иногда появлялась даже при запросе картинок из администраторской части, а тут ни php, ни mysql ни при чем. Поэтому виноват Apache. Но почему проблема возникает только в админке, ведь и администраторскую и пользовательскую часть обслуживает один и тот же Apache. Ошибка возникала только в админке потому, что только в админке был .htaccess с AuthType Basic. А в Apache был включен модуль auth_mysql - похоже, это именно он периодически выдает предупреждение.
8) Прописать в db_query проверку соединения и восстановление в случае неудачного mysql_ping. При обновлениях приходеться каждый раз вносить исправления.
9) Так как это warning а не error в настройках PHP (зависит от хостера, но обычно можно через .htaccess) выставить php_value error_reporting 1
10) Добавить следующую строку в файл
index.php в самое начало:
error_reporting(1);
1 - это рапортовать только об ошибках.