Base de Conhecimento

Erro 2006 MySQL: server has gone away, como resolver

  • mysql, erro 2006, server has gone away, wait_timeout, max_allowed_packet, conexão
  • Usuários acharam útil: 0

Entenda o erro 2006 do MySQL, confira o wait_timeout, o tamanho do pacote em max_allowed_packet e use o roteiro de diagnóstico para achar a causa.

Por Redação Eleven Host · @robson.direitodigital · 29 de outubro de 2026 · 8 min de leitura

Arte da Eleven Host: janela de terminal com o título sobre Erro 2006 MySQL

Capa da Redação Eleven Host para o guia: Erro 2006 MySQL: server has gone away, como resolver Arte: Eleven Host

O erro 2006 MySQL, "MySQL server has gone away", aparece quando o cliente não consegue enviar uma consulta ao servidor porque a conexão já foi encerrada. Segundo o manual do MySQL 8.4, a causa mais comum é o servidor ter fechado a conexão por tempo.

Este guia explica o que o erro significa, como separar o 2006 do 2013, quais são as causas listadas no manual e como diagnosticar cada uma, do tempo limite ao tamanho do pacote (max_allowed_packet). Os fatos vêm do manual do MySQL 8.4, nas seções sobre o erro "MySQL server has gone away" e sobre pacotes grandes demais. Os exemplos usam exemplo.com como endereço fictício. Se o seu banco roda numa VPS, o guia completo de servidor VPS explica o que fica por sua conta.

O que o erro 2006 significa

No manual do MySQL, o código 2006 corresponde ao símbolo CR_SERVER_GONE_ERROR, descrito como "o cliente não conseguiu enviar uma pergunta ao servidor". Em português simples: a conexão que o programa achava estar aberta já não existe mais quando ele tenta usá-la.

A mensagem não diz que a consulta está errada nem que a senha mudou. Ela diz que o caminho entre o cliente e o servidor foi cortado antes do envio. Por isso, o diagnóstico começa em quem fechou a conexão e por quê.

Erro 2006 ou erro 2013: qual a diferença?

O manual trata os dois na mesma seção. O 2013 corresponde a CR_SERVER_LOST e indica que o cliente não recebeu uma resposta completa do servidor. O 2006 indica que o cliente não conseguiu enviar a consulta. O manual diz ainda que qual dos dois aparece depende do sistema operacional.

Como o manual trata os dois na mesma seção, se aparecer o 2013 no seu caso, comece pelo mesmo roteiro de diagnóstico.

Causa mais comum: o servidor encerrou a conexão por tempo

Segundo o manual do MySQL 8.4, a causa mais comum é o servidor ter encerrado a conexão. Por padrão, o servidor fecha a conexão depois de 8 horas sem atividade. Esse prazo é definido pela variável wait_timeout.

Um exemplo para visualizar: uma aplicação abre a conexão de manhã, fica parada e só volta a consultar o banco depois que o prazo passou. Quando ela tenta enviar a consulta, o servidor já fechou a conexão e o erro 2006 aparece.

O erro 2006 diz que a conexão já estava fechada quando a consulta ia sair, e não que a consulta esteja errada.

Como conferir o valor de wait_timeout

O manual indica o comando mysqladmin variables, que lista as variáveis do servidor. Procure nele a linha de wait_timeout para ver o valor em uso.

Em script, repita a consulta

O manual explica que, em um script, basta repetir a consulta para o cliente se reconectar sozinho, desde que a reconexão automática esteja ligada no cliente. No cliente de linha de comando mysql, ela vem ligada por padrão.

Precisa de um servidor próprio para o MySQL? A VPS Plano Bronze sai a partir de R$ 17,00/mês; confira na loja o que o plano inclui. Ver planos de VPS

Outras causas listadas no manual

Se o tempo limite não explica o seu caso, o manual do MySQL 8.4 lista outras situações que podem produzir o erro:

  • Conexão encerrada à força: alguém rodou KILL ou mysqladmin kill sobre aquela conexão.
  • Consulta depois de fechar a conexão: é um erro de lógica da aplicação, que tenta usar uma conexão que ela mesma já fechou.
  • Host do cliente sem permissão: o servidor não aceita conexões vindas daquele host.
  • Tempo limite de leitura ou escrita no cliente: aumentar esse limite pode ajudar.
  • Reconexão desligada no cliente: sem ela, a conexão perdida não volta sozinha.
  • Cliente Windows parado por muito tempo: o manual sugere chamar mysql_ping() antes de usar a conexão, ou definir um wait_timeout bem alto.
  • Pacote grande demais ou fora de ordem: ligado ao max_allowed_packet do servidor, tratado na próxima seção.
  • Falha de DNS ou do nome do host, skip_networking ligado ou firewall bloqueando a porta 3306.
  • Processos filhos que dividem a mesma conexão e bug do servidor.

Repare que a lista mistura problemas do servidor, da rede e da aplicação. Por isso o roteiro de diagnóstico abaixo ajuda a descartar uma causa por vez.

Pacote grande demais: max_allowed_packet

O manual explica que o MySQL fecha a conexão quando recebe um pacote maior que o limite configurado. Nesse caso o servidor devolve o erro ER_NET_PACKET_TOO_LARGE e encerra a conexão. O limite é definido por max_allowed_packet.

  • O maior pacote possível é de 1 GB.
  • O valor padrão é 16 MB no cliente mysql e 64 MB no servidor.
  • Um INSERT ou REPLACE com muitas linhas vai ao servidor num pedido só. Se o pacote passar do limite, diminua o número de linhas por comando.

Para ver como um arquivo de dados grande é levado ao banco, o guia Importar banco de dados MySQL: passo a passo e erros comuns mostra o processo de importação, e o Backup MySQL com mysqldump: como fazer e restaurar mostra como gerar a cópia com mysqldump.

Como aumentar o limite no cliente e no servidor

O manual recomenda aumentar o valor nos dois lados, no cliente e no servidor. No cliente de linha de comando, use a opção:

mysql --max_allowed_packet=32M

No servidor, a mesma variável pode ser gravada no arquivo de configuração do MySQL.

Na seção [mysqld], escreva a linha max_allowed_packet=128M. Ao iniciar o servidor direto, a opção equivalente é mysqld --max_allowed_packet=128M.

Depois de editar o arquivo de configuração, reinicie o servidor para aplicar a mudança. Em um Ubuntu, o comando é sudo systemctl restart mysql. O manual afirma que é seguro aumentar o valor, porque a memória extra só é usada quando um pacote grande realmente aparece.

Como diagnosticar, passo a passo

O manual do MySQL 8.4 indica estes caminhos para descobrir o que aconteceu:

  1. O servidor reiniciou? Rode mysqladmin version e veja o tempo ligado do servidor. Se ele é curto, o servidor caiu e voltou, e a conexão antiga foi perdida.
  2. Veja os valores em uso: rode mysqladmin variables e procure wait_timeout e max_allowed_packet.
  3. Peça mais detalhes ao log: com log_error_verbosity = 3, o servidor grava no log de erros as mensagens de desconexão.
  4. Procure a consulta problemática: ligue o general query log para ver se a consulta aparece nele.
  5. Descarte causas de rede: confira o nome do host, o skip_networking e se um firewall bloqueia a porta 3306.

Se a conexão nem chega ao servidor, o problema é de outra natureza, e o guia Erro 2002 MySQL: não conecta ao servidor, como resolver mostra como investigar o erro 2002. Se o erro for de acesso, veja o Erro 1045 MySQL: Access denied for user, como resolver. E se o erro vier de uma consulta mal escrita, o guia Erro 1064 MySQL: erro de sintaxe SQL, como resolver cobre o erro de sintaxe.

Entenda

Roteiro rápido para o erro 2006:

  1. Rode mysqladmin version e veja se o servidor reiniciou.
  2. Confira wait_timeout com mysqladmin variables.
  3. Em script, repita a consulta com a reconexão ligada.
  4. Se envia muitas linhas num comando, reduza as linhas ou aumente max_allowed_packet no cliente e no servidor.
  5. Ligue log_error_verbosity = 3 para ver as desconexões no log.

Quando o banco é lento ou cai com frequência

Se o erro 2006 aparece junto com lentidão, vale investigar também as consultas que demoram. O guia MySQL lento: como achar as consultas que travam o site mostra como achar as consultas que travam o site. E se o servidor MySQL fica numa VPS que você administra, lembre que a conexão depende também do firewall e da rede do servidor.

Como evitar o erro 2006 no futuro

  • Anote o valor de wait_timeout: assim você sabe depois de quanto tempo parado a conexão cai.
  • Ligue a reconexão no cliente: em scripts, ela permite repetir a consulta sem derrubar a rotina.
  • Divida comandos grandes: um INSERT com muitas linhas pode virar vários comandos menores.
  • Ajuste o limite de pacote nos dois lados: o manual pede o aumento no cliente e no servidor.
  • Ligue o log de erros mais detalhado quando investigar: log_error_verbosity = 3 registra as desconexões.

Procura um serviço de banco de dados? O 11SQL Mini sai a partir de R$ 9,90/mês; confira na loja o que cada plano inclui. Ver planos de banco de dados

Perguntas frequentes

O erro 2006 significa que o MySQL caiu?

Não necessariamente. Segundo o manual do MySQL 8.4, a causa mais comum é o servidor ter encerrado a conexão por tempo. Para saber se o servidor reiniciou, rode mysqladmin version e veja o tempo ligado.

Qual é o tempo padrão que o MySQL espera antes de fechar a conexão?

Por padrão, o servidor fecha a conexão após 8 horas sem atividade. O valor é definido pela variável wait_timeout.

Qual a diferença entre os erros 2006 e 2013?

O 2006 indica que o cliente não conseguiu enviar a consulta ao servidor. O 2013 indica que o cliente não recebeu uma resposta completa. O manual diz que qual dos dois aparece depende do sistema operacional.

Aumentar o max_allowed_packet é seguro?

Segundo o manual, sim: a memória extra só é usada quando um pacote grande realmente aparece. Aumente o valor no cliente e no servidor.

Como evitar o erro em um script?

Repita a consulta: com a reconexão automática ligada no cliente, ele se reconecta sozinho. No cliente de linha de comando mysql, essa opção vem ligada por padrão.

Esta resposta lhe foi útil?

Artigos Relacionados