Я попытался импортировать большой файл sql через phpMyAdmin... Но он продолжал показывать ошибку
"Сервер MySql ушел"
Что делать?
Я попытался импортировать большой файл sql через phpMyAdmin... Но он продолжал показывать ошибку
"Сервер MySql ушел"
Что делать?
Как указано здесь:
Две наиболее распространенные причины (и исправления) для сервера MySQL исчезли (ошибка 2006):
Тайм-аут сервера и соединение закрыто. Как исправить:
убедитесь, что переменная 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 часов).Сервер сбросил неверный или слишком большой пакет. Если 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;
Для меня это решение не сработало, поэтому я выполнил
SET GLOBAL max_allowed_packet=1073741824;
в моем SQL-клиенте.
Если вы не можете изменить это с помощью службы MYSql, вы должны остановить службу и изменить ее в файле "my.ini".
Например:
max_allowed_packet=20M
Если вы используете значения по умолчанию, у вас есть много возможностей для оптимизации конфигурации mysql.
Первым шагом, который я рекомендую, является увеличение max_allowed_packet до 128M.
Затем загрузите MySQL Tuning Primer script и запустите его. Он предоставит рекомендации для нескольких аспектов вашей конфигурации для лучшей производительности.
Также изучите настройку значений таймаута как в MySQL, так и в PHP.
Насколько велика (размер файла) - файл, который вы импортируете, и можете ли вы импортировать файл с помощью клиента командной строки mysql вместо PHPMyAdmin?
Если вы работаете над XAMPP, вы можете исправить ошибку в MySQL Server, выпустив следующие изменения.
откройте файл my.ini Местоположение my.ini(D:\xampp\mysql\bin\my.ini)
измените следующие значения переменных
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Если вы используете MAMP на OS X, вам нужно будет изменить значение max_allowed_packet
в шаблоне для MySQL.
Вы можете найти его по адресу: Файл> Изменить шаблон> MySQL my.cnf
Затем просто найдите max_allowed_packet
, измените значение и сохраните.
Я решил проблему с этим коротким файлом /etc/mysql/my.cnf:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
Другая причина, по которой это может произойти, - нехватка памяти. Проверьте /var/log/messages и убедитесь, что ваш my.cnf не настроен, чтобы заставить mysqld выделять больше памяти, чем ваша машина.
Ваш mysqld-процесс может быть фактически убит ядром, а затем повторно запущен процессом "safe_mysqld", если вы его не осознаете.
Используйте верхнюю часть и наблюдайте за распределением памяти, пока она работает, чтобы узнать, каков ваш запас.
сделайте резервную копию my.cnf перед его изменением.
У меня была эта ошибка и другие связанные, когда я импортировал файл с 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, вы также можете установить некоторые или все из них, используя это.
Если ваши данные содержат данные 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).
Я обновил "max_allowed_packet" до 1024M, но он все еще не работал. Оказывается, мое развертывание script запущено:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Не забудьте явно указать большее число из командной строки, если вы это сделаете.
Если требуется сработать много времени, увеличьте переменную wait_timeout
.
Если это не удается сразу, увеличьте переменную max_allowed_packet
; он все равно не работает, убедитесь, что команда действительна SQL. У меня были безответные цитаты, которые все испортили.
Кроме того, если это возможно, подумайте об ограничении числа вставок одной команды SQL, скажем, 1000. Вы можете создать script, который создает несколько операторов из одного, путем повторного ввода части INSERT... n вставок.
У меня такая же ошибка. Чтобы решить эту проблему, просто откройте файл my.ini.. в строке нет 36 измените значение максимально допустимого размера пакета, т.е. max_allowed_packet = 20M
У меня была схожая ошибка сегодня, когда дублирование базы данных (сервер MySQL ушел...), но когда я попытался перезапустить перезапуск mysql.server, я получил ошибку
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 username - p 'и можете проверить и изменить эти ограничения.
На учетных записях общего хостинга 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 Статья
Убедитесь, что процесс mysqld не перезапускается из-за менеджеров сервисов, таких как systemd.
У меня была эта проблема в vagrant с centos 7. Настройки не помогли. Оказалось, что именно systemd убивал службу mysqld каждый раз, когда занимал слишком много памяти.
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
не помогает.