Я пытался импортировать большой файл sql через phpMyAdmin ... Но он продолжал показывать ошибку
'Сервер MySQL ушел'
Что делать?
max_allowed_packet
. Немного грубо, но если это работает, вы можете найти вменяемое значение.
Я пытался импортировать большой файл sql через phpMyAdmin ... Но он продолжал показывать ошибку
'Сервер MySQL ушел'
Что делать?
max_allowed_packet
. Немного грубо, но если это работает, вы можете найти вменяемое значение.
Ответы:
Как указано здесь :
Две наиболее распространенные причины (и исправления) для сервера MySQL исчезли (ошибка 2006):
Тайм-аут сервера и соединение закрыто. Как исправить:
проверьте, достаточно ли велика переменная wait_timeout в конфигурационном файле my.cnf вашего mysqld. В 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
Затем перезапустите сервер. Чтобы получить их значения, введите в клиент mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
запрос MySQL), и файл, который я импортировал, имел несколько очень больших записей. Я открыл файл my.ini (я работал под управлением Windows) и установил значение this:, max_allowed_packet = 64M
перезапустил MySQL и повторно запустил импорт.
wait_timeout
линию
Для меня это решение не сработало, поэтому я выполнил
SET GLOBAL max_allowed_packet=1073741824;
в моем клиенте SQL.
Если вы не можете изменить это при запущенной службе MYSql, вам следует остановить службу и изменить переменную в файле «my.ini».
Например:
max_allowed_packet=20M
php.ini
файл (как предложено @GBD в ответе), и файл конфигурации MySQL, my.ini
чтобы он работал.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
в одном клиенте, а затем импорт большого .sql
файла в другом сеансе будет работать нормально.
Если вы работаете над XAMPP, вы можете исправить проблему с MySQL Server, выполнив следующие изменения.
Откройте файл my.ini. Расположение my.ini (D: \ xampp \ mysql \ bin \ my.ini)
изменить следующие значения переменных
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Если вы работаете со значениями по умолчанию, у вас есть много возможностей для оптимизации конфигурации MySQL.
Первым шагом, который я рекомендую, является увеличение max_allowed_packet до 128M.
Затем загрузите скрипт учебника по настройке MySQL и запустите его. Он предоставит рекомендации для нескольких аспектов вашей конфигурации для лучшей производительности.
Также обратите внимание на настройку значений времени ожидания как в MySQL, так и в PHP.
Насколько велик (размер файла) импортируемый файл, и можете ли вы импортировать файл с помощью клиента командной строки mysql вместо PHPMyAdmin?
Если вы используете 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
[mysqld]
Другая причина, по которой это может произойти, - нехватка памяти. Проверьте / var / log / messages и убедитесь, что ваш my.cnf не настроен так, чтобы mysqld выделял больше памяти, чем у вашей машины.
Ваш процесс mysqld на самом деле может быть убит ядром, а затем перезапущен процессом safe_mysqld без вашего ведома.
Используйте top и следите за распределением памяти во время работы, чтобы увидеть, какой у вас запас.
сделайте резервную копию my.cnf перед его изменением.
У меня была эта и другие связанные ошибки, когда я импортировал файл 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, вы также можете установить некоторые или все из них, используя это.
Я обновил «max_allowed_packet» до 1024M, но он все еще не работал. Оказывается, мой сценарий развертывания был запущен:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Не забудьте явно указать большее число из командной строки, если вы делаете это таким образом.
Если ваши данные включают 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).
Если для сбоя требуется много времени, увеличьте wait_timeout
переменную.
Если сразу не получается, увеличьте max_allowed_packet
переменную; если он все еще не работает, убедитесь, что команда является допустимым SQL. У меня были скрытые цитаты, которые все испортили.
Также, если это возможно, рассмотрите возможность ограничения количества вставок одной команды SQL, скажем, до 1000. Вы можете создать сценарий, который создает несколько операторов из одной, повторно вводя часть INSERT ... каждые n вставок.
я получил похожую ошибку .. чтобы решить эту проблему, просто откройте файл my.ini .. здесь в строке № 36 измените значение максимально допустимого размера пакета, т.е. max_allowed_packet = 20 миллионов
У меня была похожая ошибка сегодня при дублировании базы данных (сервер MySQL ушел ...), но когда я попытался перезапустить mysql.server restart, я получил ошибку
ERROR! The server quit without updating PID ...
Вот как я это решил: я открыл Приложения / Утилиты / и запустил Activity Monitor
quit mysqld
затем смог решить проблему с ошибкой
mysql.server restart
Я делаю некоторые большие вычисления, которые включают в себя соединение MySQL, чтобы остаться надолго и с тяжелыми данными. я столкнулся с этим "Mysql уйти проблема". Поэтому я попытался оптимизировать запросы, но это мне не помогло, тогда я увеличил предел переменных mysql, который по умолчанию установлен на более низкое значение.
wait_timeout max_allowed_packet
До предела, который когда-либо вас устраивает, должен быть любой номер * 1024 (байт). Вы можете войти в терминал, используя команду « mysql -u username - p », и можете проверить и изменить эти ограничения переменных.
На учетных записях общего хостинга 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 Статья
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
переменной не помогает.
Ни одно из решений относительно размера пакета или тайм-аутов не имело для меня никакого значения. Мне нужно было отключить ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
У меня такая же проблема с
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
В файле \ xampp \ mysql \ bin \ my.ini phpmyadmin мы получаем только
[mysqldump]
max_allowed_packet=110M
который предназначен только для mysqldump -u root -p dbname. Я решил мою проблему, заменив код выше
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M