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. See Secçã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
). See
Secçã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? See
Secçã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?
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.