MySQL Server ушел при импорте большого файла sql

Я попытался импортировать большой файл sql через phpMyAdmin... Но он продолжал показывать ошибку

"Сервер MySql ушел"

Что делать?

Ответ 1

Как указано здесь:

Две наиболее распространенные причины (и исправления) для сервера MySQL исчезли (ошибка 2006):

Тайм-аут сервера и соединение закрыто. Как исправить:

  1. убедитесь, что переменная wait_timeout в вашем файле конфигурации mysqlds my.cnf достаточно велика. В Debian: sudo nano/etc/mysql/my.cnf, установите wait_timeout = 600 секунд (вы можете настроить/уменьшить это значение, когда ошибка 2006 исчезла), затем sudo/etc/init.d/mysql restart. Я не проверял, но значение по умолчанию для wait_timeout может составлять около 28800 секунд (8 часов).

  2. Сервер сбросил неверный или слишком большой пакет. Если mysqld получает слишком большой или неправильный пакет, он предполагает, что с клиентом что-то не так, и закрывает соединение. Вы можете увеличить максимальный размер пакета, увеличив значение max_allowed_packet в файле my.cnf. В Debian: sudo nano/etc/mysql/my.cnf, установите max_allowed_packet = 64M (вы можете настроить/уменьшить это значение, когда ошибка 2006 исчезла), затем sudo/etc/init.d/mysql restart.

Изменить: обратите внимание, что файлы опций MySQL не имеют своих команд, уже доступных в качестве комментариев (как, например, в php.ini). Таким образом, вы должны ввести любое изменение/твик в my.cnf или my.ini и поместить их в каталог mysql/data или в любой другой путь, в соответствующую группу параметров, таких как [client], [myslqd]... и т.д., например:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Затем перезапустите сервер. Чтобы получить их значения, введите в консоли:
select @@wait_timeout;
select @@max_allowed_packet;

Ответ 2

Для меня это решение не сработало, поэтому я выполнил

SET GLOBAL max_allowed_packet=1073741824;

в моем SQL-клиенте.

Если вы не можете изменить это с помощью службы MYSql, вы должны остановить службу и изменить ее в файле "my.ini".

Например:

max_allowed_packet=20M

Ответ 3

Если вы используете значения по умолчанию, у вас есть много возможностей для оптимизации конфигурации mysql.

Первым шагом, который я рекомендую, является увеличение max_allowed_packet до 128M.

Затем загрузите MySQL Tuning Primer script и запустите его. Он предоставит рекомендации для нескольких аспектов вашей конфигурации для лучшей производительности.

Также изучите настройку значений таймаута как в MySQL, так и в PHP.

Насколько велика (размер файла) - файл, который вы импортируете, и можете ли вы импортировать файл с помощью клиента командной строки mysql вместо PHPMyAdmin?

Ответ 4

Если вы работаете над XAMPP, вы можете исправить ошибку в MySQL Server, выпустив следующие изменения.

откройте файл my.ini Местоположение my.ini(D:\xampp\mysql\bin\my.ini)

измените следующие значения переменных

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500

Ответ 5

Если вы используете MAMP на OS X, вам нужно будет изменить значение max_allowed_packet в шаблоне для MySQL.

  1. Вы можете найти его по адресу: Файл> Изменить шаблон> MySQL my.cnf

  2. Затем просто найдите max_allowed_packet, измените значение и сохраните.

Ответ 6

Я решил проблему с этим коротким файлом /etc/mysql/my.cnf:

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M

Ответ 7

Другая причина, по которой это может произойти, - нехватка памяти. Проверьте /var/log/messages и убедитесь, что ваш my.cnf не настроен, чтобы заставить mysqld выделять больше памяти, чем ваша машина.

Ваш mysqld-процесс может быть фактически убит ядром, а затем повторно запущен процессом "safe_mysqld", если вы его не осознаете.

Используйте верхнюю часть и наблюдайте за распределением памяти, пока она работает, чтобы узнать, каков ваш запас.

сделайте резервную копию my.cnf перед его изменением.

Ответ 8

У меня была эта ошибка и другие связанные, когда я импортировал файл с 16 ГБ SQL. Для меня, редактируя my.ini и устанавливая следующее (на основе нескольких разных сообщений) в разделе [mysqld]:

max_allowed_packet      = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout        = 600
net_write_timeout       = 600

Если вы работаете под Windows, перейдите на панель управления, службы и посмотрите подробности для MySQL, и вы увидите, где находится my.ini. Затем после редактирования и сохранения my.ini перезапустите службу mysql (или перезагрузите компьютер).

Если вы используете HeidiSQL, вы также можете установить некоторые или все из них, используя это.

Ответ 9

Если ваши данные содержат данные BLOB:

Обратите внимание, что импорт данных из командной строки, кажется, захлестнул данные BLOB, в результате чего ошибка "сервер MySQL ушла".

Чтобы этого избежать, заново создайте mysqldump, но с флагом --hex-blob:

http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob

который выведет файл данных с шестнадцатеричными значениями, а не двоичными среди другого текста.

У PhpMyAdmin также есть опция "Дамп двоичные столбцы в шестнадцатеричной нотации (например," abc "становится 0x616263)", который работает красиво.

Обратите внимание, что существует давняя ошибка (по состоянию на декабрь 2015 года), что означает, что столбцы GEOM не преобразуются: Создайте резервную копию таблицы с столбцом GEOMETRY с помощью mysqldump? поэтому использование такой программы, как PhpMyAdmin, кажется единственным обходным решением (опция, отмеченная выше, правильно конвертирует столбцы GEOM).

Ответ 10

Я обновил "max_allowed_packet" до 1024M, но он все еще не работал. Оказывается, мое развертывание script запущено:

mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql

Не забудьте явно указать большее число из командной строки, если вы это сделаете.

Ответ 11

Если требуется сработать много времени, увеличьте переменную wait_timeout.

Если это не удается сразу, увеличьте переменную max_allowed_packet; он все равно не работает, убедитесь, что команда действительна SQL. У меня были безответные цитаты, которые все испортили.

Кроме того, если это возможно, подумайте об ограничении числа вставок одной команды SQL, скажем, 1000. Вы можете создать script, который создает несколько операторов из одного, путем повторного ввода части INSERT... n вставок.

Ответ 12

У меня такая же ошибка. Чтобы решить эту проблему, просто откройте файл my.ini.. в строке нет 36 измените значение максимально допустимого размера пакета, т.е. max_allowed_packet = 20M

Ответ 13

У меня была схожая ошибка сегодня, когда дублирование базы данных (сервер MySQL ушел...), но когда я попытался перезапустить перезапуск mysql.server, я получил ошибку

ERROR! The server quit without updating PID ...

Вот как я это решил: Я открыл Приложения/Утилиты/и запустил Activity Monitor

 quit mysqld

то он смог решить проблему с ошибкой

mysql.server restart

Ответ 14

Я делаю несколько больших вычислений, которые связаны с подключением mysql, чтобы оставаться долгое время и с тяжелыми данными. я столкнулся с этой проблемой "Mysql go away". Поэтому я попытался оптимизировать запросы, но это не помогло мне, но я увеличил предел переменных mysql, который по умолчанию установлен на меньшее значение.

wait_timeout max_allowed_packet

До предела, что вам когда-либо подходит, это должен быть любой номер * 1024 (байты). вы можете войти в терминал с помощью команды mysql -u username - p 'и можете проверить и изменить эти ограничения.

Ответ 15

Для общего хостинга GoDaddy

На учетных записях общего хостинга GoDaddy сложно настроить файлы PHP.ini и т.д. Однако есть и другой способ, и он просто отлично сработал для меня. (Я только что успешно загрузил 3.8Mb текстовый файл .sql, содержащий 3100 строк и 145 столбцов. Используя команду IMPORT в phpMyAdmin, я получал ужасную ошибку MySQL server пропал, и никакой дополнительной информации.)

Я обнаружил, что у Мэтта Батчера был правильный ответ. Как и Мэтт, я испробовал все возможные приемы, от экспорта баз данных MySQL в виде кусочков до написания сценариев, которые разбивают большой импорт на более мелкие. Но вот что сработало:

(1) CPANEL ---> ФАЙЛЫ (группа) ---> РЕЗЕРВНОЕ КОПИРОВАНИЕ

(2a) В разделе "Частичное резервное копирование"...
(2b) В разделе "Загрузить резервную копию базы данных MySQL"
(2c) Выберите базу данных и загрузите резервную копию (этот шаг необязателен, но целесообразен)

(3a) Прямо справа от 2b под заголовком "Восстановление резервной копии базы данных MySQL"
(3b) Выберите файл импорта .SQL с вашего локального диска
(3c) Истинное счастье будет вашим (вскоре....) Мое заняло около 5 секунд

Я смог использовать этот метод для импорта одной таблицы. Ничего другого в моей базе данных не было затронуто - но именно это защищает шаг (2) выше.

Заметки:
а. Если вы не знаете, как создать файл импорта .SQL, используйте phpMyAdmin для экспорта таблицы и изменения этой файловой структуры.

ИСТОЧНИК: Matt Butcher 2010 Статья

Ответ 16

Убедитесь, что процесс mysqld не перезапускается из-за менеджеров сервисов, таких как systemd.

У меня была эта проблема в vagrant с centos 7. Настройки не помогли. Оказалось, что именно systemd убивал службу mysqld каждый раз, когда занимал слишком много памяти.

Ответ 17

Если увеличение max_allowed_packet не помогает.

Я получал ту же ошибку, что и вы, при импорте файла .sql в мою базу данных через Sequel Pro.

Ошибка по-прежнему сохраняется после повышения max_allowed_packet до 512M поэтому вместо этого я запустил импорт в командной строке:

mysql --verbose -u root -p DatabaseName < MySQL.sql

Это дало следующую ошибку:

ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled

Я нашел пару полезных вопросов StackOverflow:

В моем случае мой файл .sql был немного поврежден или что-то в этом роде. Получаемый нами дамп MySQL поставляется в виде двух zip файлов, которые необходимо объединить, а затем разархивировать. Я думаю, что распаковка была сначала прервана, в результате чего в файле появились странные символы и кодировки. Получение свежего дампа MySQL и распаковка его правильно помогли мне.

Просто хотел добавить это здесь на тот случай, если другие обнаружат, что увеличение переменной max_allowed_packet не помогает.