17 ответов:
как заявил здесь:
две наиболее распространенные причины (и исправления) для сервера MySQL ушли (ошибка 2006) являются:
сервер истек время ожидания и закрыл соединение. Как исправить:
проверьте, что переменная wait_timeout в вашем mysqld моя.файл конфигурации cnf достаточно велик. На Debian:
sudo nano /etc/mysql/my.cnf, setwait_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, setmax_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 = 600max_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-файл мой.ini location is (D:\xampp\mysql\bin\my.ini)
измените следующие значения переменных
max_allowed_packet = 64M innodb_lock_wait_timeout = 500
Если вы используете MAMP на OS X, вам нужно будет изменить
max_allowed_packetзначение в шаблоне для MySQL.
Вы можете найти его в: File > Edit template > MySQL my.cnf
тогда просто найдите
max_allowed_packetизмените значение и спасать.надеюсь, это кому-то поможет.
Я решил свою проблему с этим коротким /etc/mysql / my.cnf file:
[mysqld] wait_timeout = 600 max_allowed_packet = 100M
другая причина, по которой это может произойти, - это нехватка памяти. Проверьте /var/log / messages и убедитесь, что ваш my.cnf не настроен, чтобы заставить mysqld выделять больше памяти, чем ваша машина.
ваш процесс mysqld может быть фактически убит ядром, а затем повторно запущен процессом "safe_mysqld" без вашего ведома.
используйте top и наблюдайте за распределением памяти во время его работы, чтобы увидеть, что такое ваш запас.
сделать резервную копию.cnf прежде чем менять его.
У меня была эта ошибка и другие связанные с ней, когда я импортировал в 16 ГБ SQL-файл. Для меня, редактирование моего.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, перезагрузите службу mysql (или перезагрузите компьютер).
Если вы используете HeidiSQL, вы можно также установить некоторые или все из них, используя это.
если ваши данные содержат
BLOBданные:обратите внимание, что импорт данных из командной строки, похоже, задыхается от данных BLOB, что приводит к ошибке "MySQL server has gone away".
чтобы избежать этого, воссоздайте 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 ...вот как я решил это: Я открыл приложения / утилиты / и запустил Монитор активности
quit mysqldзатем удалось решить проблему ошибки с
mysql.server restart
Я делаю некоторые большие вычисления, которые включают в себя соединение mysql, чтобы оставаться долгое время и с тяжелыми данными. я столкнулся с этой "проблемой Mysql go away". Поэтому я попытался оптимизировать запросы, но это не помогло мне, тогда я увеличил предел переменных mysql, который по умолчанию установлен на более низкое значение.
wait_timeout max_allowed_packet
до предела, что когда-либо подходит вам, это должно быть любое число * 1024(байт). вы можете войти в терминал используя 'mysql-u username-p' команда и может проверить и изменить для этих переменных пределов.
убедитесь, что процесс 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 '' appeared in the statement, but this is not allowed unless option --binary-mode is enabledя нашел пару полезных вопросов StackOverflow:
- включить бинарный режим при восстановлении базы данных из дампа SQL
- ошибка Mysql: ASCII '\0 ' при импорте файла sql на сервер linux
в моем случае, мой
.sqlфайл был немного поврежден или что-то в этом роде. Дамп MySQL, который мы получаем, поставляется в двух zip-файлах, которые должны быть объединены вместе, а затем распакованы. Я думаю, что распаковка была прервана изначально, оставив файл с некоторыми нечетными символами и кодировками. Получение нового дампа MySQL и его распаковка правильно работал для меня.просто хотел добавить это здесь, если другие найдут, что увеличение
max_allowed_packetпеременная не помогает.
для общего хостинга GoDaddy
на учетных записях общего хостинга GoDaddy сложно настроить PHP.Ини файлов. Однако есть и другой способ, и он просто отлично работал для меня. (Я только что успешно загрузил 3.8 Мб .текстовый файл sql, содержащий 3100 строк и 145 cols. Используя команду импорта в phpMyAdmin, я получал страшное сервер MySQL ушел ошибки, и никакой дополнительной информации.)
я обнаружил, что Мэтт Мясник имел право ответ. Как и Мэтт, я пробовал все виды трюков, от экспорта баз данных MySQL в кусочках размером с укус, до написания сценариев, которые разбивают большой импорт на более мелкие. Но вот что получилось:
(1) CPANEL ---> файлы (группа) ---> резервное копирование
(2a) под заголовком" частичные резервные копии"...
(2b) в разделе "загрузить резервную копию базы данных MySQL"
(2c) Выберите свою базу данных и загрузите резервную копию (этот шаг необязателен, но мудр)(3a) непосредственно справа от 2b, в разделе "восстановление резервной копии базы данных MySQL"
(3b) выберите .SQL импорт файла с вашего локального диска
(3c) истинное счастье будет вашим (скоро....) Мой занял около 5 секундя смог использовать этот метод для импорта одной таблицы. Ничто другое в моей базе данных не было затронуто - но это то, что Шаг (2) выше предназначен для защиты.
Примечания:
а. Если вы не знаете как создать .Файл импорта SQL, используйте phpMyAdmin для экспорта таблицы и изменения структуры этого файла.источник: Мэтт Мясник 2010 Статья
Comments