MySQL server has gone away



2011-04-07

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 MySQL 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 MySQL 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 MySQL novamente. Veja mais informações sobre isto na Seção A.4.1, "O Que Fazer Se o MySQL 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 MySQL morreu ou não. (Você pode encontrar into no arquivo hostname.err). Veja mais informações sobre isto na Seção A.4.1, "O Que Fazer Se o MySQL Continua Falhando".
  • Se uma cosulta específica matar o mysqld e as tabelas envolvidas foram verificadas com CHECK TABLE antes que você fizesse a consulta, você pode fazer um caso de teste para isto? Veja mais informações sobre isto na 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?
Veja mais informações sobre isto na Seção 1.7.1.2, "Fazendo perguntas ou relatando erros".
Postar um comentário