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

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

'сервер MySql ушел'

Что делать?

17 ответов


как заявил здесь:

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

сервер истекло время ожидания и закрыл соединение. Как исправить:

  1. проверьте, что переменная wait_timeout в вашем mysqld моя.файл конфигурации cnf достаточно большой. На Debian: sudo nano /etc/mysql/my.cnf, set 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, set max_allowed_packet = 64M (вы можете tweak / уменьшить это значение, когда ошибка 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;


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

SET GLOBAL max_allowed_packet=1073741824;

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

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

например:

max_allowed_packet=20M

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

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

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

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

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


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

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

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

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500

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

  1. Вы можете найти его в: файл > редактировать шаблон > MySQL my.cnf

  2. тогда просто найдите max_allowed_packet измените значение и спасать.

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


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

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M

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

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

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

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


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

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


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

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

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

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

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

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

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


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

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

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


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

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

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


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


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

ERROR! The server quit without updating PID ...

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

 quit mysqld

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

mysql.server restart

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

wait_timeout max_allowed_packet

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


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

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


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

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

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

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

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

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

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

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

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


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

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

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

(1) CPANEL ---> файлы (группа) ---> резервное копирование

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

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

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

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

источник: Мэтт Мясник 2010 Статья