Исправляем ошибку: 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 рабочих дня.