В общем ошибка:
Ошибка: 2006 ( CR_SERVER_GONE_ERROR
) - сервер 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.
Дважды проверьте правильность установки значения:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Вы получили тайм-аут от соединения TCP / IP на стороне клиента.
Решение: увеличить wait_timeout
переменную .
Вы попытались выполнить запрос после того, как соединение с сервером было закрыто.
Решение: Логическая ошибка в приложении должна быть исправлена.
Ошибка поиска имени хоста (например, проблема DNS-сервера) или сервер был запущен с --skip-networking
параметром.
Другая возможность заключается в том, что ваш брандмауэр блокирует порт MySQL (например, 3306 по умолчанию).
Работающий поток был уничтожен, поэтому повторите попытку.
Вы столкнулись с ошибкой, когда сервер погиб при выполнении запроса.
Клиент, работающий на другом хосте, не имеет необходимых привилегий для подключения.
И многое другое, так что узнайте больше на: B.5.2.9 Сервер MySQL исчез .
Отладка
Вот несколько идей отладки на уровне экспертов:
Проверьте журналы, например
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Проверьте соединение через mysql
, telnet
или функцию звона (например , mysql_ping
в PHP).
Используйте, tcpdump
чтобы прослушать связь MySQL (не будет работать для сокетного соединения), например:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
В Linux используйте strace
. На BSD / Mac использовать dtrace
/ dtruss
, например
sudo dtruss -a -fn mysqld 2>&1
Смотрите: Начало работы с DTracing MySQL
Узнайте больше, как отлаживать сервер или клиент MySQL по адресу: 26.5 Отладка и портирование MySQL .
Для справки, проверьте исходный код в sql-common/client.c
файле, ответственном за выдачу CR_SERVER_GONE_ERROR
ошибки для команды клиента.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}