Erro 2006 MySQL: server has gone away, como resolver
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

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
KILLoumysqladmin killsobre 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 umwait_timeoutbem alto. - Pacote grande demais ou fora de ordem: ligado ao
max_allowed_packetdo servidor, tratado na próxima seção. - Falha de DNS ou do nome do host,
skip_networkingligado 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
mysqle 64 MB no servidor. - Um
INSERTouREPLACEcom 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:
- O servidor reiniciou? Rode
mysqladmin versione veja o tempo ligado do servidor. Se ele é curto, o servidor caiu e voltou, e a conexão antiga foi perdida. - Veja os valores em uso: rode
mysqladmin variablese procurewait_timeoutemax_allowed_packet. - Peça mais detalhes ao log: com
log_error_verbosity = 3, o servidor grava no log de erros as mensagens de desconexão. - Procure a consulta problemática: ligue o general query log para ver se a consulta aparece nele.
- Descarte causas de rede: confira o nome do host, o
skip_networkinge 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:
- Rode
mysqladmin versione veja se o servidor reiniciou. - Confira
wait_timeoutcommysqladmin variables. - Em script, repita a consulta com a reconexão ligada.
- Se envia muitas linhas num comando, reduza as linhas ou aumente
max_allowed_packetno cliente e no servidor. - Ligue
log_error_verbosity = 3para 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
INSERTcom 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 = 3registra 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.