#Что означает неисправность и в каких условиях возникает
При импорте многострочного дампа SQL клиент показывает ERROR 2006 MySQL server has gone away, Lost connection to MySQL server during query или ошибку размера пакета. Эти признаки не всегда означают один и тот же дефект: проверьте размер отдельного SQL-оператора, журналы сервера и способ запуска импорта. Без резервной копии нельзя бездумно перезапускать импорт в уже частично изменённую базу: дамп может содержать INSERT, DDL или DROP, которые при повторе дублируют или удаляют данные.
#Возможные причины: как различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Превышен max_allowed_packetВ дампе есть единичный очень крупный INSERT или BLOB. | Ошибка возникает на одинаковом крупном операторе, в логе packet too large. | Согласованно увеличить предел клиента и сервера либо создавать дамп меньшими пакетами. |
| Сервер завершился или исчерпал ресурсыВ системном журнале есть OOM, crash, restart MySQL. | Ошибка связи совпала с перезапуском или нехваткой диска. | Восстановить ресурсы и выяснить причину сбоя. |
| Импорт идёт через веб-интерфейсЗапрос обрывается по таймауту браузера/PHP, но MySQL работает. | Через консольные средства тот же файл читается без отказа PHP. | Выбирать консольный импорт с корректным контролем ошибок. |
#Пошаговая диагностика и устранение
- Сделайте отдельную копию исходного файлаСохраните исходный архив SQL без изменений, запишите размер, контрольную сумму и целевую БД. Перед любыми повторами восстановите свежую копию БД в изолированную тестовую среду. Не импортируйте в production повторно «с начала», пока не выясните, какие таблицы и изменения уже применились.
- Выясните способ и место обрываОтметьте, выполняете ли импорт через phpMyAdmin, консоль mysql или панель хостинга. Сохраните последнюю строку ошибки и примерное время. Если сбой связан с таймаутом HTTP, попробуйте воспроизвести процедуру только на тестовой БД через командную строку, не меняя настройки MySQL по одному сообщению браузера.
- Проверьте состояние сервера во время ошибкиПо SSH на Linux посмотрите
systemctl status mysql(у Percona имя службы может совпадать) иjournalctl -u mysql --since "30 minutes ago". Если нет прав, запросите журнал у администратора. Признаки OOM, рестарта или ENOSPC означают, что исправление max_allowed_packet само по себе не поможет. - Сравните лимиты пакетовОткройте mysql и выполните
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';; зафиксируйте число байтов. У клиента mysql также есть собственный предел. Если дамп содержит огромный единичный INSERT, он может его превысить. Сам по себе размер файла 10 ГБ не означает пакет 10 ГБ: причина зависит от размеров отдельных SQL-сообщений. - В тестовой среде проверьте управляемый импортВ каталоге, где лежит копия дампа, используйте
mysql --max_allowed_packet=64M -h 127.0.0.1 -u import_user -p test_db < backup.sql, заменив тестовую БД, имя пользователя и файл. Откройте терминал именно на машине с дампом, поскольку перенаправление<читает локальный файл; подключение спросит пароль интерактивно. Выберите 64M только если сервер допускает такой размер. - Согласуйте серверную настройку лишь при подтвержденииЕсли журнал явно сообщает packet too large, DBA может увеличить
max_allowed_packetв пределах доступной памяти и согласованного риска. Зафиксируйте прежнее значение и проверьте, что настройка действует на нужном экземпляре. После изменения повторите импорт только в очищенную тестовую БД, не на частично восстановленные рабочие таблицы. - Разберите неполный импортСравните на испытательной базе количество таблиц, журнал ошибок и контрольные суммы исходных данных. Дамп с DDL и автоподтверждениями часто не откатывается целиком одной транзакцией. Если ошибка произошла на production, прежде чем пытаться продолжить с произвольной строки, оцените состояние таблиц и подготовьте план восстановления из надёжной копии.
- Подтвердите результат и верните временные настройкиПосле полного завершения без ошибок выполните точечные SELECT COUNT(*) для ключевых таблиц, проверьте приложение и просмотр журналов MySQL. Если тест успешен, проведите согласованный рабочий перенос. Временное увеличение лимита верните к прежнему значению, если оно не требуется для приложения и нет обоснования удерживать его.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить исправление и что делать, если оно не помогло
Импорт считается успешным, если клиент завершился с кодом 0, сервер не перезапускался, а выборочные данные и таблицы в тестовой базе совпадают с источником. Если ошибка повторяется на одном SQL-операторе, исследуйте размер пакета и тип данных; при случайных обрывах — журналы сети и самого mysqld.