Назад | Перейти на главную страницу

«Сервер MySQL ушел» при попытке импортировать большой файл дампа

Я пытаюсь импортировать файл дампа MySQL.

Файл был создан на сервере Linux, я пытаюсь импортировать в Windows

Я вошел в командную строку и запустил:

SOURCE c:/dump.sql

Но, похоже, это вызвало некоторые проблемы с набором символов (особенно с умными кавычками и другой нестандартной пунктуацией).

Мне предложили бежать:

mysql -u username -d dbase < c:\dump.sql

Когда я пытаюсь это сделать, я получаю сообщение об ошибке

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

Небольшой поиск в Google предположил, что это связано с переключателем max_allowed_packet, но я пробовал это, и это не сработало. Кто-нибудь знает, что это может быть?

Если у кого-то есть предложение по проблеме с набором символов, это тоже будет полезно.

Моим первым побуждением после прочтения сообщения об ошибке в заголовке вопроса было предложить увеличить max_allowed_packet. Вы упомянули, что пробовали "этот переключатель", и это не сработало. Можете ли вы подтвердить, что вы правильно изменили файл конфигурации сервера? Ваша фраза звучит так, будто вы пытались использовать это в качестве переключателя командной строки в командной строке клиента mysql.exe, что не заставит сервер изменить поведение.

Итак, вкратце, вы должны попытаться найти и отредактировать файл my.cnf, который в настоящее время использует ваш сервер. в [mysqld] измените настройки max_allowed_packet на что-то вроде

[mysqld]
max_allowed_packet=32M

Не забудьте перезапустить сервер после изменения конфигурации.

В качестве примера я использовал 32M (смехотворно большое значение). Поскольку ваш запрос кажется огромным, вам следует попробовать это значение (или, возможно, даже 64 МБ, если у вас достаточно оперативной памяти), чтобы увидеть, работает ли он.

Другой вариант - оставить сервер как есть и изменить поведение клиента, используемого для создания дампа SQL. Скажите ему ограничить размер отдельных запросов до 1 МБ - это тоже должно помочь.

Подробнее см. В.1.2.10. Пакет слишком большой в руководстве по MySQL.

В MySQL 5.7.24 это произошло из-за старой конфигурации MySQL 5.6.

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

Опция ниже обязательна, если версия SQL такая же 5.7.5 или выше.

sql_mode=TRADITIONAL

Также есть два параметра max_allowed_packet в /etc/my.cnf, другой - для mysqldump. Пожалуйста, обратите внимание на то же самое.

max_allowed_packet = <1G>

Моя установка находится на CentOS7.

Можете ли вы получить доступ к экземпляру MySQL на сервере Windows из окна Linux?

Если да, можете ли вы запустить команду в окне Linux с помощью переключатель -h подключиться к серверу на windows box?

mysql -u username -d dbase -h <windows host> < dump.sql

это может решить ваши проблемы с набором символов, так как вы используете клиент Linux в исходной коробке для импорта. (просто предположение)

Что говорится в журнале MySQL?

Иногда об этой ошибке сообщает клиент, если на сервере есть неисправимая ошибка. Это может быть индикатором повреждения таблиц базы данных на диске.

Был ли у вашей учетной записи пароль? Возможно, вам нужно добавить переключатель -p:

mysql -u username -p -d dbase < c:\dump.sql