MySQL и MariaDB LinuxWindowsmacOS 2006

MySQL: error 2006 — server has gone away

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Соединение закрыто: тайм-аут, слишком большой пакет или падение сервера. Увеличьте wait_timeout и max_allowed_packet, проверьте логи.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Параметры
  5. Падения и память
  6. Клиент и сеть

#Что означает ошибка

2006
MySQL server has gone away

Ошибка 2006 «MySQL server has gone away» возникает, когда соединение закрылось: сервер перезапустился, истёк wait_timeout, запрос или пакет превысил max_allowed_packet, или соединение сброшено сетью/файрволом. Часто проявляется на длинных скриптах и импорте больших дампов.

Смотрите журнал ошибок MySQL: он покажет перезапуск или падение.

Затем проверьте параметры.

Соединение закрыто: тайм-аут, слишком большой пакет или падение сервера. Увеличьте wait_timeout и max_allowed_packet, проверьте логи.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Тайм-аут простояwait_timeout.2006.Увеличьте.
Большой пакетmax_allowed_packet.2006.Увеличьте.
Падение сервераOOM.2006.Проверьте.
Долгие запросыНагрузка.2006.Оптимизируйте.

#Пошаговое решение

  1. Проверьте журнал MySQLНа сервере MySQL/MariaDB откройте системный терминал через SSH с правами администратора и посмотрите журнал службы: sudo journalctl -u mysql -n 100 --no-pager (для MariaDB — -u mariadb). Сопоставьте отметки времени с ERROR 2006: если сервер перезапускался или процесс был завершён из-за памяти, проблему нужно решать на сервере, а не увеличением сетевого таймаута клиента.
  2. Проверьте max_allowed_packetВ phpMyAdmin → «SQL» либо в клиенте mysql выполните SHOW VARIABLES LIKE "max_allowed_packet"; и сравните значение с размером отправляемого INSERT/BLOB/результата. Увеличивайте параметр лишь при подтверждённом превышении и с учётом памяти сервера; значение 256 МБ не универсально. Настройку внесите в конфигурацию соответствующей версии MySQL и после согласованного перезапуска проверьте значение снова.
  3. Проверьте wait_timeoutВ том же SQL-клиенте выполните SHOW VARIABLES LIKE "wait_timeout"; и SHOW VARIABLES LIKE "net_read_timeout";. Если соединение простаивает дольше wait_timeout, приложение должно проверять его состояние и устанавливать новое перед запросом. Увеличивать таймаут без анализа нагрузки нежелательно: простаивающие соединения продолжают занимать ресурсы.
  4. Проверьте память и дискВ терминале сервера последовательно выполните df -h, df -i, free -h, затем journalctl -k -b | grep -Ei "out of memory|oom|killed process" с правами, достаточными для просмотра. Полный раздел, исчерпанные inode или убийство mysqld из-за OOM объясняют обрыв; освобождайте место и меняйте конфигурацию только после определения виновника и сохранения резервных копий.
  5. Добавьте переподключение в приложенииВ приложении найдите участок, где соединение хранится между заданиями или долго не используется. Для чтения можно предусмотреть повторное подключение после ошибки 2006/2013; для INSERT/UPDATE/платёжных действий нельзя автоматически повторять запрос, пока не выяснено, успел ли сервер зафиксировать транзакцию. После изменения тестируйте отдельный сценарий, затем проверяйте отсутствие новых обрывов в журнале.

#Параметры

Выполните SHOW VARIABLES LIKE 'max_allowed_packet'; и SHOW VARIABLES LIKE 'wait_timeout';. Увеличьте пакет: в my.cnf [mysqld] max_allowed_packet=256M, [mysql] max_allowed_packet=256M, временно — SET GLOBAL max_allowed_packet=268435456;. Для длинных задач увеличьте wait_timeout и net_read_timeout. После изменения перезапустите сервер.

#Падения и память

Проверьте журнал: sudo journalctl -u mysql -n 100 или /var/log/mysql/error.log. Сообщения Out of memory / Killed process в dmesg говорят о срабатывании OOM-killer — снизьте innodb_buffer_pool_size или добавьте память. Следите за Uptime: SHOW GLOBAL STATUS LIKE 'Uptime'; — малое значение означает недавний перезапуск. Проверьте диск на заполнение (df -h).

#Клиент и сеть

В приложении добавьте переподключение при ошибке 2006 и 2013. Не держите долгие простаивающие соединения. Для импорта: mysql --max_allowed_packet=256M -u user -p db < dump.sql, дамп создавайте с --extended-insert=false или меньшими пакетами --net_buffer_length=16384. Проверьте файрвол и прокси, обрывающие неактивные соединения (idle timeout).

SQLКоманда
Диагностика параметров, вызывающих потерю соединения.
SHOW VARIABLES LIKE 'max_allowed_packet';
SHOW VARIABLES LIKE 'wait_timeout';
SHOW GLOBAL STATUS LIKE 'Uptime';

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.