Erro: MySQL server has gone away
Esta seção também cobre o erro relacionado sobre perda de conexão com o servidor durante uma consulta
.
A razão mais comum para o erro MySQL server has gone away
é que o servidor esgotou o tempo limite e fechou a conexão. Por padrão, o servidor fecha uma conexão depois de 8 horas se nada aconctecer. Você pode alterar o tempo limite configurando a variável wait_timeout
quando você iniciar o mysqld
.
Outra razão comum para receber o erro MySQL server has gone away
é porque você executou um fechar
em sua conexão MariaDB a então tentou executar uma consulta na conexão fechada.
Se você tiver um script, você só tem que executar a consulta novamente para o cliente reconectar autometicamente.
Você normalmente pode obter os seguintes códigos de erros neste caso (qual você obterá dependerá do SO):
Código de erro | Descrição |
CR_SERVER_GONE_ERROR
| O cliente não pode enviar um pedido ao servidor. |
CR_SERVER_LOST
| O cliente não obteve um erro ao escrever no servidor, mas não obteve uma resposta completa (ou nenhuma resposta) a seu pedido. |
Você também irá obter este erro se alguém tiver matado a thread em execução com kill #threadid#
.
Você pode verificar que o MariaDB não morreu executando mysqladmin version
e examinando o tempo em execução. Se o problema é que o mysqld falhou você deve descobrir a razão da falha. Você deve neste caso iniciar verificando se executar a consulta novamente irá finalizar o MariaDB novamente. Leia Seção A.4.1, "O Que Fazer Se o MariaDB Continua Falhando".
Você também pode obter estes erros se você enviar uma consulta incorreta ou muito grande ao servidor. Se mysqld
recebe um pacote muito grande ou fora de ordem. ele assume que alguma coisa saiu errado com o cliente e fecha a conexão. Se você precisa de grandes consultas (por exemplo, se você está trabalhando com grandes colunas BLOB
), você pode aumentar o limite da consulta iniciando o mysqld
com a opção -O max_allowed_packet=#
(padrão 1M). A memória extra é alocada sobre demanda, assim o mysqld
alocará mais memória apenas quando você executar uma grande consulta ou quando o mysqld
deve retornar um grande registro de resultado!
Você também obterá uma conexão perdida se você estiver enviando um pacote >= 16M e se seu cliente for mais antigo que a versão 4.0.8 e a versão do seu servidor é 4.0.8 e acima ou vice versa.
Se você quiser fazer um relatório de erros descreendo este prolema, esteja certo de ter incluído as seguintes informações:
- Informe se o MariaDB morreu ou não. (Você pode encontrar into no arquivo
hostname.err
). Leia Seção A.4.1, "O Que Fazer Se o MariaDB Continua Falhando". - Se uma cosulta específica matar o
mysqld
e as tabelas envolvidas foram verificadas comCHECK TABLE
antes que você fizesse a consulta, você pode fazer um caso de teste para isto? Leia Seção E.1.6, "Fazendo um Caso de Teste Se Ocorre um Corrompimento de Tabela". - Qual é o valor da variável
wait_timeout
no servidor MySQL?mysqladmin variables
lhe dá o valor destas variáveis. - Você tentou executar
mysqld
com--log
e verificou se a consulta executada apareceu no log?
See "Fazendo perguntas ou relatando erros".