Исправляем ошибку: MySQL server has gone away

Исправляем ошибку: MySQL server has gone away

Описание

В данной статье пойдет речь об ошибке, которую можно получить при обращении к MySQL Server:

MySQL server has gone away

Причины возникновения

Наиболее частыми причинами возникновения ошибки являются следующие причины:

  • Слишком долгое неактивное соединение между скриптом/приложением и MySQL сервером (по умолчанию составляет 8 часов, потом разрывается и вылезает эта ошибка)
  • Слишком большой размер пакета при запросе к серверу MySQL (по умолчанию = 16M, если размер пакета больше, например, из-за какого-нибудь BLOB объекта, который превышает данный размер, то вылетает эта ошибка)
  • Закончившаяся оперативная память на сервере с MySQL (проверить можно командой free -h на ОС Linux)

Как исправить ошибку

Разрыв соединения из-за таймаута

Если ваш скрипт или программа устанавливает соединение с MySQL сервером, но после этого ничего не передает, то спустя некоторое время (по умолчанию обычно эта настройка равна 8 часам) сервер просто закрывает соединение и при попытке что-либо записать в базу - получаем ошибку "MySQL server has gone away". Чтобы увеличить таймаут, необходимо внести правки в конфиг MySQL сервера (обычно mysqld.cnf) в секции [mysqld]. В данном примере мы увеличим срок такого таймаута до 24 часов. Для этого вносим следующие настройки в секцию [mysqld]:

# 24 hours
wait_timeout = 86400
# 24 hours
interactive_timeout = 86400

В итоге должно получиться что то подобное:

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

Разрыв соединения из-за слишком большого размера пакета

В том случае, если у вас очень большие по размеру пакеты (например, какой-нибудь BLOB объект, который хранится в базе, вроде фото, видео и т.п.), то в этом случае MySQL сервер может также выдавать аналогичную ошибку "MySQL server has gone away". Чтобы избавиться от этой ошибки, необходимо увеличит в конфиге максимальный размер пакета. Для этого открываем конфиг MySQL, (обычно mysqld.cnf), ищем в нем опцию max_allowed_packet, которая должна находиться в секции[mysqld] и меняем текущее значение на бОльшее. В нашем примере мы меняем стандартное значение 16M, на 256M. Должно быть как на скриншоте ниже:

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

Закончившаяся память

Для корректной работы MySQL сервера и любой другой программы требуется оперативная память. Если вы заметили, что у вас выскакивает ошибка "MySQL server has gone away" и в эти моменты на сервере нет свободной оперативной памяти - значит вам надо эту причину каким-либо образом устранить. Отключить лишние сервисы, которые потребляют память, найти другие запущенные процессы, которые потребляют слишком много ресурсов и ограничит их, либо банально увеличить доступную память, путем установки новой планки(ок).

Была ли эта статья Вам полезна?

Добавить комментарий

Ваш адрес email не будет опубликован.

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.