Em geral, o erro:
Erro: 2006 ( CR_SERVER_GONE_ERROR
) - servidor MySQL foi embora
significa que o cliente não pôde enviar uma pergunta ao servidor .
mysql
importar
No seu caso específico, ao importar o arquivo do banco de dados via mysql
, isso provavelmente significa que algumas das consultas no arquivo SQL são muito grandes para serem importadas e não puderam ser executadas no servidor; portanto, o cliente falha no primeiro erro ocorrido.
Então você tem as seguintes possibilidades:
Adicione a opção force ( -f
) para mysql
prosseguir e executar o restante das consultas.
Isso é útil se o banco de dados tiver algumas consultas grandes relacionadas ao cache que não são relevantes de qualquer maneira.
Aumente max_allowed_packet
ewait_timeout
na configuração do seu servidor (por exemplo ~/.my.cnf
).
Despejar o banco de dados usando a --skip-extended-insert
opção para dividir as consultas grandes. Em seguida, importe-o novamente.
Tente aplicar a --max-allowed-packet
opção para mysql
.
Razões comuns
Em geral, esse erro pode significar várias coisas, como:
uma consulta ao servidor está incorreta ou muito grande,
Solução: Aumente a max_allowed_packet
variável .
Verifique se a variável está na [mysqld]
seção, não [mysql]
.
Não tenha medo de usar grandes números para testes (como 1G
).
Não esqueça de reiniciar o servidor MySQL / MariaDB.
Verifique novamente se o valor foi definido corretamente por:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Você recebeu um tempo limite da conexão TCP / IP no lado do cliente.
Solução: Aumente a wait_timeout
variável .
Você tentou executar uma consulta após o fechamento da conexão com o servidor.
Solução: Um erro lógico no aplicativo deve ser corrigido.
Falha na pesquisa do nome do host (por exemplo, problema no servidor DNS) ou o servidor foi iniciado com a --skip-networking
opção
Outra possibilidade é que seu firewall bloqueie a porta MySQL (por exemplo, 3306 por padrão).
O encadeamento em execução foi interrompido, portanto, tente novamente.
Você encontrou um erro em que o servidor morreu durante a execução da consulta.
Um cliente executando em um host diferente não possui os privilégios necessários para se conectar.
E muito mais, então aprenda mais em: B.5.2.9 O servidor MySQL foi embora .
Depuração
Aqui estão algumas idéias de depuração no nível de especialista:
Verifique os logs, por exemplo
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Teste sua conexão via mysql
, telnet
ou funções de ping (por exemplo, mysql_ping
em PHP).
Use tcpdump
para farejar a comunicação MySQL (não funcionará para conexão de soquete), por exemplo:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
No Linux, use strace
. No BSD / Mac, use dtrace
/ dtruss
, por exemplo
sudo dtruss -a -fn mysqld 2>&1
Consulte: Introdução ao DTracing MySQL
Aprenda mais sobre como depurar o servidor ou cliente MySQL em: 26.5 Depurando e portando o MySQL .
Para referência, verifique o código-fonte no sql-common/client.c
arquivo responsável por gerar o CR_SERVER_GONE_ERROR
erro para o comando do cliente.
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;
}