Ошибка MySQL server has gone away означает, что база данных закрыла соединение, пока сайт выполнял запрос или ждал его результата. Три типовые причины: сервер MySQL упал или перезапустился, соединение простаивало дольше лимита wait_timeout, либо запрос оказался больше лимита max_allowed_packet. Диагноз ставится по логу MySQL и по моменту появления ошибки: на каких страницах и операциях она вылезает. Ниже - как разобраться самому и что именно сказать программисту или хостеру, чтобы починили с первого захода.

Где искать текст ошибки. Посетитель видит белую страницу или ошибку 500, а сама фраза gone away лежит в логах: error_log сайта или журнал Битрикс. Если на экране просто 500 - начните с разбора в статье про ошибку 500, а сюда возвращайтесь, когда в логах нашлась строка про MySQL.

Что означает MySQL server has gone away простыми словами

Сайт и база данных - два отдельных процесса, которые общаются через соединение, как два человека по телефону. Ошибка gone away - это «алло, вы меня слышите?»: сайт задал вопрос, а на другом конце уже никого. Либо собеседник ушёл сам (MySQL перезапустился), либо повесил трубку после долгого молчания (таймаут), либо ему попытались продиктовать слишком длинное сообщение разом (превышен размер пакета).

Отсюда главный принцип диагностики: смотреть нужно не только на сайт, а на то, что происходило с базой в момент обрыва. Эта информация есть в логах MySQL и панели хостинга.

Почему база обрывает соединение: пять причин

ПричинаКак проявляетсяЧто делать
MySQL упал из-за нехватки памятиОшибка у всех посетителей разом, в логе MySQL видны рестартыСмотреть память сервера, оптимизировать настройки или менять тариф
Простой дольше wait_timeoutПадают долгие операции: импорт из 1С, выгрузки, агентыУвеличить wait_timeout, добавить переподключение в коде
Запрос больше max_allowed_packetНе сохраняются большие данные: длинные описания, файлы в БДПоднять max_allowed_packet на сервере
Долгий запрос принудительно завершёнПадают отчёты и фильтры по большому каталогуОптимизировать запрос, добавить индексы
Сеть между сайтом и внешней БДБаза на отдельном сервере, ошибки идут волнамиПроверять сеть, размещать БД ближе к сайту

Как найти причину gone away: диагностика за 5 шагов

  1. Зафиксируйте моментЗапишите точное время и операцию: страница, импорт, сохранение элемента. Без этой привязки читать логи бесполезно.
  2. Откройте лог MySQLВ панели хостинга или на сервере. Ищите рядом с временем ошибки строки о рестарте сервера и записи Out of memory.
  3. Проверьте память сервераГрафик памяти в панели хостинга или VPS. Если MySQL убивают по памяти, ошибка будет возвращаться в пиковые часы.
  4. Сравните лимиты с задачейПопросите вывести значения wait_timeout и max_allowed_packet. Импорт на 40 минут при таймауте в 60 секунд - вот и диагноз.
  5. Поймайте тяжёлый запросВключите лог медленных запросов (slow log) и посмотрите, что выполнялось в момент обрыва.

Импорт или обмен с 1С падает с gone away?

Найдём узкое место по логам, оптимизируем запросы и настроим корректное переподключение. Диагностика бесплатная, смета - до начала работ.

Найти причину

Что сказать программисту или хостеру, чтобы починили быстро

Полдела в таких инцидентах - правильно поставить задачу. Вместо «сайт не работает, почините» дайте исполнителю факты:

  • «Ошибка появляется при импорте каталога примерно на десятой минуте» - явный намёк на wait_timeout или нехватку памяти процесса
  • «Упало у всех с 14:20, в логе MySQL в это время рестарт» - вопрос к хостеру про память сервера
  • «Не сохраняется карточка товара с большим описанием» - проверить max_allowed_packet
  • «Ошибка приходит волнами в часы пик» - смотреть нагрузку и медленные запросы
Совет. На виртуальном хостинге часть настроек MySQL изменить нельзя - они общие для всех клиентов площадки. Тогда решение либо в коде (переподключение, разбивка импорта на порции), либо в переезде на VPS. Второе разумно совмещать с передачей сервера на администрирование.

Как не ловить эту ошибку снова

Важно. Слепое увеличение лимитов - обезболивающее, а не лечение. Каталог растёт, и через полгода импорт снова упрётся в потолок, только падать будет дольше и больнее. Правильный порядок: найти операцию-виновника, оптимизировать её и лишь потом подстроить лимиты с запасом.

Профилактика сводится к трём привычкам: тяжёлые задачи (импорты, выгрузки, пересчёты) выполняются по cron или из командной строки, а не на заходе посетителя; память сервера стоит под мониторингом с уведомлениями; после каждого заметного роста каталога лимиты пересматриваются. Всё это - штатная часть регулярного обслуживания сайта.

Частые вопросы про MySQL server has gone away

Ошибка появляется только при обмене с 1С. Почему?
Обмен - самая долгая операция на типовом сайте: соединение с базой успевает простоять дольше wait_timeout, а пакеты выгрузки бывают больше max_allowed_packet. Лечится настройкой лимитов под реальный объём каталога и разбивкой обмена на порции.
Хостер говорит, что с MySQL всё в порядке. Кто виноват?
Обе стороны могут быть правы: сервер работает, но лимиты по умолчанию не подходят вашему сайту, либо код держит соединение открытым дольше нужного. Нужен разбор конкретного инцидента по логам - с временем, страницей и операцией.
Поможет ли переезд на более дорогой тариф хостинга?
Если причина в нехватке памяти - да, поможет. Если в таймаутах или размере пакета - нет: лимиты по умолчанию на новом тарифе будут теми же. Сначала диагноз, потом покупки.
Может ли gone away испортить базу данных?
Сам обрыв соединения базу не портит. Но если MySQL регулярно убивают по нехватке памяти, со временем возможны повреждения таблиц. Проверьте, что бэкапы базы делаются ежедневно и хранятся не на этом же сервере.

Итог: MySQL server has gone away - не мистика, а один из пяти сценариев, и каждый виден в логах. Если разбираться некогда, передайте задачу нам: доработка сайтов на 1С-Битрикс - найдём причину, оптимизируем обмен и настроим лимиты. Alavir работает с Битрикс с 2013 года, за плечами 450+ проектов.