Como corrigir MySQL server has gone away
O que é o erro MySQL server has gone away?
Esse erro é a mensagem que o cliente MySQL devolve quando a conexão com o servidor foi encerrada no meio de uma operação. No WordPress, o PHP abriu uma conexão, mas o servidor de banco fechou essa conexão por inatividade, por exceder um limite de pacote, ou porque o próprio MySQL reiniciou ou ficou sem memória. A query falha e a página quebra ou exibe o aviso.
Como identificar
- Mensagem “MySQL server has gone away” no log de erros do PHP ou na tela durante uma operação no banco.
- Importações grandes via phpMyAdmin ou WP-CLI param no meio com “MySQL server has gone away”.
- O erro surge em consultas pesadas ou após o site ficar ocioso por alguns minutos.
- Plugins de backup ou de migração falham ao gravar registros muito grandes no banco.
Como prevenir
- Defina o max_allowed_packet com folga (64M ou mais) para suportar importações e backups grandes
- Quebre operações pesadas em lotes menores em vez de uma única query gigante
- Monitore a memória do servidor para o MySQL não ser encerrado pelo OOM killer em picos
Causa
- Conexão fechada por inatividade quando o tempo ocioso passa do wait_timeout configurado no MySQL.
- Query enviou um pacote maior que o max_allowed_packet do servidor, fazendo o MySQL derrubar a conexão.
- Servidor MySQL reiniciou, travou ou foi morto pelo OOM killer por falta de memória durante a operação.
- Consulta muito longa estourou o net_read_timeout ou o net_write_timeout do MySQL.
- Conexão persistente reaproveitada pelo PHP depois que o servidor já a havia encerrado.
Como resolver
- Identifique quando o erro ocorre: veja se ele aparece em importações grandes (indício de max_allowed_packet baixo) ou após inatividade (indício de wait_timeout curto). O contexto aponta o parâmetro a ajustar.
- Aumente o max_allowed_packet: no painel da hospedagem ou no arquivo de configuração do MySQL (my.cnf), eleve o limite de pacote para 64M ou mais, e reinicie o serviço MySQL.
- Aumente o wait_timeout: ainda no my.cnf, suba o wait_timeout e o interactive_timeout para que conexões ociosas não sejam cortadas tão cedo. Em hospedagem compartilhada, peça o ajuste ao suporte.
- Cheque a memória do servidor: se o MySQL é morto por falta de memória, reveja o uso de RAM do plano ou avalie subir de plano. Um MySQL reiniciando derruba todas as conexões ativas.
INI
; Ajustes no my.cnf (secao [mysqld]) - reinicie o MySQL apos editar
[mysqld]
max_allowed_packet = 64M
wait_timeout = 300
interactive_timeout = 300
net_read_timeout = 120
net_write_timeout = 120
Perguntas frequentes
O que significa MySQL server has gone away?
Significa que a conexão com o servidor MySQL foi encerrada antes de a query terminar. O WordPress tinha uma conexão aberta, mas o servidor a fechou por timeout, por exceder o limite de pacote ou porque o MySQL reiniciou.
O erro só aparece em importações grandes. Por quê?
Porque a query envia um pacote maior que o max_allowed_packet do servidor, e o MySQL derruba a conexão. Aumentar o max_allowed_packet para 64M ou mais costuma resolver esse caso.
Qual a diferença entre wait_timeout e max_allowed_packet?
O wait_timeout controla quanto tempo uma conexão ociosa fica aberta antes de ser fechada. O max_allowed_packet controla o tamanho máximo de um pacote enviado ao servidor. Erros após inatividade pedem o primeiro; erros em dados grandes pedem o segundo.
Estou em hospedagem compartilhada e não acesso o my.cnf. O que faço?
Abra um chamado com o suporte pedindo para aumentar o max_allowed_packet e o wait_timeout do MySQL. Muitos painéis também expõem esses limites na seção de banco de dados.
Pode ser falta de memória do servidor?
Sim. Se o MySQL é encerrado pelo OOM killer por falta de RAM, ele reinicia e derruba as conexões, gerando o erro. Verifique o uso de memória do plano; em picos constantes, avalie subir de plano.
Aumentei os timeouts e o erro persiste. O que checar?
Confirme que o MySQL não está reiniciando (veja o log do serviço) e que o ajuste foi aplicado de fato (a sessão precisa ser reiniciada). Consultas mal otimizadas que estouram o net_write_timeout também provocam o erro.














