Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

CR_SERVER_GONE_ERROR_2006 Linux / DevOps

Траблшутинг ошибки MySQL server has gone away: max_allowed_packet и wait_timeout

Обновлено: 21.08.2026
  • Клиентские приложения получают исключение SQLSTATE[HY000] [2006] MySQL server has gone away.
  • Разрыв соединений во время вставки больших объемов данных (BLOB, длинные дампы SQL).
  • Фоновые воркеры (Celery, Laravel Queue, Cron) падают при попытке отправить запрос после простоя.
  • В error.log фиксируются сообщения Got an error reading communication packets.

1. Увеличение лимита размера сетевого пакета

Добавьте в /etc/mysql/my.cnf в секции [mysqld] и [mysqldump]:

[mysqld]
max_allowed_packet = 128M
net_buffer_length = 32K

[mysqldump]
max_allowed_packet = 128M

Примените параметр динамически без перезагрузки:

SET GLOBAL max_allowed_packet = 134217728;

2. Тюнинг таймаутов удержания соединений

Увеличьте время жизни неактивных соединений в my.cnf:

[mysqld]
# Таймаут простоя для неинтерактивных соединений (сек)
wait_timeout = 28800

# Таймаут простоя для интерактивных клиентов (mysql-cli)
interactive_timeout = 28800

# Таймауты чтения/записи сетевых сокетов
net_read_timeout = 120
net_write_timeout = 120
SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;

3. Проверка сетевых сбросов TCP на уровне ядра Linux

sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=15
sysctl -w net.ipv4.tcp_keepalive_probes=5
💡 Практика специалистов: Если ошибка возникает ровно через 60 или 120 секунд после начала долгого запроса, проверьте настройки таймаутов во внешних прокси и балансировщиках (HAProxy, Nginx stream timeout, AWS ALB idle timeout).

Частые вопросы (FAQ)

Почему воркеры очередей регулярно получают ошибку 2006?

Воркер держит соединение к БД открытым в пуле, пока ждет задачи. Если время ожидания превышает wait_timeout, MySQL принудительно закрывает сокет. Решение — пинговать соединение перед выполнением запроса (auto-reconnect) или поднять wait_timeout.

Как отследить, какой именно запрос превысил max_allowed_packet?

Включите log_error_verbosity = 3 в MySQL 8.0 — сервер запишет подробную информацию об IP клиента, размере полученного пакета и прерванном соединении в системный error.log.

Полезные материалы
Рекомендуем