Error mysql server has gone away

В логах ошибок PHP иногда можно встретить записи типа MySQL Server Has Gone Away (error 2006). Они означают, что соединение с сервером баз данных (ожидание сессии) прервалось по таймауту. Ошибку можно легко исправить.

 

 

Как исправить ошибку MySQL Server Has Gone Away

Ошибка MySQL Server Has Gone Away (error 2006) может возникнуть в двух случаях:

  1. Соединение с MYSQL прерывается по таймауту, передача данных не успевает завершится в рамках сессии.
  2. Пакет, который передается слишком большой или некорректный

 

Error mysql server has gone away

 

Быстрым решением является увеличение значений двух глобальных переменных MySQL. Делается это в основном конфигурационном файле сервера баз данных /etc/mysql/my.cnf или в консоли MySQL авторизовавшись как root
В консоли это выглядит так:

 

set @@GLOBAL.max_allowed_packet=96000000;
set @@GLOBAL.wait_timeout=1000;

 

Решение с внесением изменений в файл /etc/mysql/my.cnf.

 

ВАРИАНТ 1 — Таймаут соединения С БД

Программный код может делать запрос в базу данных, который обрабатывается больше максимального времени выполнения запроса, установленного в конфигурационном файле. При этом срабатывает ограничение на время ожидания в сессии.

 

Лучше всего выяснить почему такие запросы имеют место и оптимизировать их, но для того чтобы получить мгновенный результат нужно увеличить значение параметра wait_timeout. Значение задается в секундах и не может быть более 28800.

 

mcedit /etc/mysql/my.cnf

wait_timeout = 1000

 

После внесения любых изменений в конфигурационный файл перезапускаем MySQL

/etc/init.d/mysql restart

 

 

ВАРИАНТ 2 — СЛИШКОМ Большой пакет

Несколько другая ситуация имеет место когда сервер отклоняет пакет из-за его слишком большого размера (или в случае если сервер не может распознать пакет по той или иной причине). В логи при этом пишутся точно такие же сообщения.

 

Решение в этом случае практически такое же — необходимо скорректировать значение одной переменной в конфигурационном файле.

mcedit /etc/mysql/my.cnf

[mysqld]
max_allowed_packet = 96M

 

В примере задан максимальный размер пакета, который сервер не будет отвергать — 96 Мб. Устанавливать слишком большие значения не стоит.

 

Также перезапускаем MySQL

/etc/init.d/mysql restart

 

Таким образом, РНР ошибка mysql server has gone away в большинстве случаев побеждается корректировкой значений двух переменных и перезапуском сервера баз данных.