Я получаю эту ошибку при попытке получить большой файл SQL (большой INSERT
запрос).
mysql> source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: *** NONE ***
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***
Ничто в таблице не обновляется. Я попытался удалить и восстановить таблицу / базу данных, а также перезапустить MySQL. Ничто из этого не решает проблему.
Вот мой максимальный размер пакета:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
Вот размер файла:
$ ls -s file.sql
79512 file.sql
Когда я попробую другой метод ...
$ ./mysql -u root -p my_db < file.sql
Enter password:
ERROR 2006 (HY000) at line 1: MySQL server has gone away
Ответы:
Добавление этой строки в
my.cnf
файл решает мою проблему.Это полезно, когда столбцы имеют большие значения, которые вызывают проблемы, вы можете найти объяснение здесь .
источник
set global max_allowed_packet=64*1024*1024;
- не требует перезапуска MySQLsudo service mysql restart
чтобы изменения в файле my.cnf вступили в силу.Вы можете увеличить максимально допустимый пакет
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
источник
Глобальное обновление и настройки my.cnf у меня почему-то не сработали. Передача
max_allowed_packet
значения непосредственно клиенту сработала здесь:источник
--max_allowed_packet
только влияет на клиента. Рассмотрим изменение сервера MySQL (туздЫ) , а также путем редактированияmax_allowed_packet
в/etc/my.cnf
файле и перезагрузить сервер MySQL.В общем ошибка:
означает, что клиент не может отправить вопрос на сервер .
mysql
ИмпортироватьВ вашем конкретном случае при импорте файла базы данных через
mysql
это, скорее всего, это означает, что некоторые запросы в файле SQL слишком велики для импорта и не могут быть выполнены на сервере, поэтому клиент отказывает при первой возникшей ошибке.Итак, у вас есть следующие возможности:
Добавьте опцию force (
-f
) дляmysql
продолжения и выполнения остальных запросов.Это полезно, если в базе данных есть несколько больших запросов, связанных с кешем, которые в любом случае не актуальны.
Увеличьте
max_allowed_packet
иwait_timeout
в конфигурации вашего сервера (например~/.my.cnf
).Дамп базы данных, используя
--skip-extended-insert
параметр, чтобы разбить большие запросы. Затем импортируйте его снова.Попробуйте применить
--max-allowed-packet
опцию дляmysql
.Общие причины
В целом эта ошибка может означать несколько вещей, таких как:
запрос к серверу неверный или слишком большой,
Решение: увеличить
max_allowed_packet
переменную .Убедитесь, что переменная находится в
[mysqld]
разделе, а не[mysql]
.Не бойтесь использовать большие числа для тестирования (как
1G
).Не забудьте перезапустить сервер MySQL / MariaDB.
Дважды проверьте правильность установки значения:
Вы получили тайм-аут от соединения TCP / IP на стороне клиента.
Решение: увеличить
wait_timeout
переменную .Вы попытались выполнить запрос после того, как соединение с сервером было закрыто.
Решение: Логическая ошибка в приложении должна быть исправлена.
Ошибка поиска имени хоста (например, проблема DNS-сервера) или сервер был запущен с
--skip-networking
параметром.Другая возможность заключается в том, что ваш брандмауэр блокирует порт MySQL (например, 3306 по умолчанию).
Работающий поток был уничтожен, поэтому повторите попытку.
Вы столкнулись с ошибкой, когда сервер погиб при выполнении запроса.
Клиент, работающий на другом хосте, не имеет необходимых привилегий для подключения.
И многое другое, так что узнайте больше на: B.5.2.9 Сервер MySQL исчез .
Отладка
Вот несколько идей отладки на уровне экспертов:
Проверьте журналы, например
Проверьте соединение через
mysql
,telnet
или функцию звона (например ,mysql_ping
в PHP).Используйте,
tcpdump
чтобы прослушать связь MySQL (не будет работать для сокетного соединения), например:В Linux используйте
strace
. На BSD / Mac использоватьdtrace
/dtruss
, напримерСмотрите: Начало работы с DTracing MySQL
Узнайте больше, как отлаживать сервер или клиент MySQL по адресу: 26.5 Отладка и портирование MySQL .
Для справки, проверьте исходный код в
sql-common/client.c
файле, ответственном за выдачуCR_SERVER_GONE_ERROR
ошибки для команды клиента.источник
На всякий случай, для проверки переменных вы можете использовать
Это отобразит текущие переменные, в данном случае max_allowed_packet, и, как кто-то сказал в другом ответе, вы можете временно установить его с помощью
В моем случае файл cnf не был принят во внимание, и я не знаю почему, поэтому код SET GLOBAL действительно помог.
источник
Я исправил ошибку
ERROR 2006 (HY000) at line 97: MySQL server has gone away
и успешно перенес файл sql> 5GB, выполнив эти два шага по порядку:Создано /etc/my.cnf, как рекомендовали другие, со следующим содержанием:
Присоединение флагов
--force --wait --reconnect
к команде (т.е.mysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect
).Важное примечание: необходимо было выполнить оба шага, потому что, если я не стал вносить изменения в файл /etc/my.cnf, а также добавлять эти флаги, некоторые из таблиц отсутствовали после импорта.
Используемая система: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 для osx10.8 (i386)
источник
my.cnf
вам нужно перезапустить службу MySQL.У меня была та же проблема, но изменение max_allowed_packet в файле my.ini / my.cnf в [mysqld] помогло.
добавить строку
Теперь перезапустите службу MySQL, как только вы закончите.
источник
Вы также можете войти в базу данных как root (или привилегию SUPER) и сделать
также не требует перезапуска MySQL. Обратите внимание, что вы должны исправить свой
my.cnf
файл, как указано в других решениях:И подтвердите изменение после перезапуска MySQL:
Вы также можете использовать командную строку, но это может потребовать обновления сценариев запуска / остановки, которые могут не выдержать обновления и исправления системы.
По запросу я добавляю свой собственный ответ здесь. Рад видеть, что это работает!
источник
Решение заключается в увеличении значений, заданных параметрами
wait_timeout
иconnect_timeout
параметрами в файле опций, под[mysqld]
тегом.Мне пришлось восстановить резервную копию MySQL на 400 МБ, и это сработало для меня (значения, которые я использовал ниже, немного преувеличены, но вы поняли):
источник
Пара вещей может происходить здесь;
INSERT
работает долго, а клиент отключается. При повторном подключении он не выбирает базу данных, поэтому возникает ошибка. Один из вариантов здесь - запустить ваш командный файл из командной строки и выбрать базу данных в аргументах, вот так;php
какой-либо другой язык. После каждого долгосрочного оператора вы можете закрыть и снова открыть соединение, гарантируя, что вы подключены в начале каждого запроса.источник
source
командыЕсли вы работаете на Mac и устанавливаете mysql через brew, как я, сработало следующее.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
Источник: Для доморощенных установок mysql, где my.cnf?
добавить
max_allowed_packet=1073741824
к/usr/local/etc/my.cnf
mysql.server restart
источник
Я столкнулся с этой ошибкой, когда я использую Mysql Cluster, я не знаю, этот вопрос от использования кластера или нет. Так как ошибка точно такая же, дайте мое решение здесь. Получение этой ошибки, потому что узлы данных внезапно перестают работать. Но когда происходит сбой узлов, вы все равно можете получить правильный результат, используя cmd:
И mysqld тоже работает правильно. Так что сначала не могу понять, что не так. Примерно через 5 минут результат ndb_mgm показывает, что узел данных не работает. Тогда я осознаю проблему. Итак, попробуйте перезапустить все узлы данных, затем сервер MySQL вернулся и все в порядке.
Но одна вещь странна для меня, после того, как я потерял сервер MySQL для некоторых запросов, когда я использую cmd как
show tables
, я все еще могу получить информацию возврата как33 rows in set (5.57 sec)
, но никакая информация таблицы не отображается.источник
Для amazon RDS (это мой случай) вы можете изменить
max_allowed_packet
значение параметра на любое числовое значение в байтах, которое имеет смысл для самых больших данных в любой вставке, которую вы можете иметь (например: если у вас есть какие-то 50-мегабайтные значения в вашей вставке, установитеmax_allowed_packet
до 64M = 67108864), в новом или существующемparameter-group
. Затем примените эту группу параметров к вашему экземпляру MySQL (может потребоваться перезагрузка экземпляра).источник
max_allowed_packet parameter
и устанавливаете для нее соответствующий размер (или если у вас действительно большие капли, просто установите максимальное значение 1073741824 ) он должен работать.При повторном подключении и получении идентификатора подключения 2 сервер почти наверняка просто вышел из строя.
Обратитесь к администратору сервера и попросите их диагностировать проблему. Никакой не вредоносный SQL не может привести к сбою сервера, и вывод mysqldump определенно не должен.
Вероятно, это тот случай, когда администратор сервера допустил серьезную ошибку в работе, например, установил размер буфера, превышающий пределы адресного пространства архитектуры или превышающий емкость виртуальной памяти. Журнал ошибок MySQL, вероятно, будет содержать некоторую соответствующую информацию; они будут следить за этим, если они в любом случае компетентны.
источник
Это более редкая проблема, но я видел это, если кто-то скопировал весь каталог / var / lib / mysql для переноса своей БД на другой сервер. Причина, по которой это не работает, заключается в том, что база данных работала и использовала файлы журналов. Иногда это не работает, если есть журналы в / var / log / mysql. Решением является также копирование файлов / var / log / mysql.
источник
Для пользователей Drupal 8, которые ищут решение для сбоя импорта БД:
В конце файла дампа sql могут быть команды вставки данных в таблицу «webprofiler». Я полагаю, что какой-то файл журнала отладки не очень важен для работы сайта, поэтому все это можно удалить Я удалил все эти вставки, включая LOCK TABLES и UNLOCK TABLES (и все, что между ними). Это в самом низу файла sql. Проблема описана здесь:
https://www.drupal.org/project/devel/issues/2723437
Но кроме усечения этой таблицы нет другого решения.
Кстати, я попробовал все решения из ответов выше, и ничего больше не помогло.
источник
Я перепробовал все вышеперечисленные решения, все не удалось.
Я закончил с использованием
-h 127.0.0.1
вместо использования по умолчаниюvar/run/mysqld/mysqld.sock
.источник
Это сообщение об ошибке также появляется, когда вы создали SCHEMA с COLLATION, отличным от того, который используется в дампе. Итак, если дамп содержит
Вы должны также отразить это в сопоставлении SCHEMA:
Я использовал utf8mb4_general_ci в схеме, потому что мой скрипт пришел из новой установки V8, теперь загрузка БД на старом 5.7 потерпела крах и сводила меня с ума.
Так что, может быть, это поможет вам сэкономить немного разочаровывающих часов ... :-)
(MacOS 10.3, mysql 5.7)
источник
Если ни один из этих ответов не решит проблему, я решил ее, удалив таблицы и автоматически создавая их таким образом:
затем просто используйте эту резервную копию с вашей базой данных, и она будет удалять и воссоздавать нужные вам таблицы
Затем вы делаете резервные копии только данных, и делаете то же самое, и это будет работать.
источник
Как насчет использования клиента MySQL, как это:
источник