Исправляем ошибку: MySQL server has gone away
- AJIekceu4
- 24.11.2021
- 33 323
- 0
- 3
- 3
- 0
Описание
В данной статье пойдет речь об ошибке, которую можно получить при обращении к 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" и в эти моменты на сервере нет свободной оперативной памяти - значит вам надо эту причину каким-либо образом устранить. Отключить лишние сервисы, которые потребляют память, найти другие запущенные процессы, которые потребляют слишком много ресурсов и ограничит их, либо банально увеличить доступную память, путем установки новой планки(ок).
Добавить комментарий