it-swarm.com.ru

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

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

'Сервер MySQL ушел'

Что делать?

226
FrancisMV123

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

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

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

  1. проверьте, достаточно ли велика переменная wait_timeout в конфигурационном файле my.cnf вашего mysqld. В Debian: Sudo nano /etc/mysql/my.cnf, установите wait_timeout = 600 секунд (вы можете Настроить/уменьшить это значение, когда ошибка 2006 исчезла), затем Sudo /etc/init.d/mysql restart. Я не проверял, но значение по умолчанию для Время ожидания может составлять около 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.

Edit:Обратите внимание, что файлы опций 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;

334
GBD

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

SET GLOBAL max_allowed_packet=1073741824;

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

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

Например: 

max_allowed_packet=20M
83
salsinga

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

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

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

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

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

17
Daemon of Chaos

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

откройте файл my.ini my.ini находится в (D:\xampp\mysql\bin\my.ini)

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

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
15
Mohan Gathala

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

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

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

Надеюсь, это кому-нибудь поможет.

8
askthebigo

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

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
6
Dan.faudemer

У меня была эта и другие связанные ошибки, когда я импортировал файл SQL размером 16 ГБ. Для меня редактирую 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, вы также можете установить некоторые или все из них, используя это.

5
BenV136

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

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

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

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

5
TekOps

Если ваши данные включают 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).

2
fooquency

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

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

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

1
e18r

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

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

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

1
coderama

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

1
parag jain

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

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

0
tvorog

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

wait_timeout max_allowed_packet

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

0
Ashish Dev swami

Если увеличение 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 не помогает.

0
Joshua Pinter

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

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

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

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

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

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

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

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

ИСТОЧНИК: Matt Butcher 2010 Article

0
gibberish

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

ERROR! The server quit without updating PID ...

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

 quit mysqld

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

mysql.server restart
0
Kingsley Ijomah