Como corrigir erro MySQL Server has gone away

Entendo perfeitamente a frustração. Esse erro é o equivalente do MySQL a “desligar o telefone na sua cara” no meio de uma conversa.

Corrigir erro MySQL Server has gone away. Otimização MariaDB. O erro “MySQL Server has gone away” (Erro 2006) geralmente acontece por dois motivos principais: ou o servidor encerrou a conexão porque o pacote enviado era grande demais, ou a conexão expirou por inatividade.

Aqui está o passo a passo para diagnosticar e resolver isso:


1. Aumentar o max_allowed_packet

Esta é a causa número um. Se você está tentando subir uma tabela pesada ou um dump de banco de dados, o MySQL mata a conexão se o arquivo for maior que o limite configurado.

  • Onde mudar: No seu arquivo de configuração (my.cnf no Linux ou my.ini no Windows).
  • O que fazer: Localize a seção [mysqld] e aumente o valor.
[mysqld]
max_allowed_packet = 64M

(Você pode tentar 128M ou até 512M se estiver lidando com BLOBs gigantes).


2. Ajustar o wait_timeout

Se o seu script demora muito para processar dados entre uma consulta e outra, o MySQL fecha a conexão por “tédio” (inatividade).

  • O que fazer: Aumente o tempo que o servidor espera antes de derrubar uma conexão ociosa.
wait_timeout = 28800
interactive_timeout = 28800

Isso define o tempo de espera para 8 horas.


3. Verificar o Tempo de Execução no PHP (se aplicável)

Se você estiver usando PHP, o problema pode não estar apenas no banco, mas no tempo que o script leva para rodar. Verifique o seu php.ini:

  • max_execution_time = 300
  • memory_limit = 256M

4. Problema de DNS (Conexões Lentas)

Às vezes, o servidor tenta resolver o nome do host de quem está conectando e isso demora tanto que gera um timeout. Adicionar esta linha no my.cnf pode resolver instantaneamente:

[mysqld]
skip-name-resolve

Como aplicar as mudanças?

Após alterar o arquivo my.cnf ou my.ini, você precisa reiniciar o serviço do MySQL para que as novas regras entrem em vigor:

  • Linux: sudo systemctl restart mysql
  • Windows: Reinicie o serviço através do “Services.msc” ou painel do XAMPP/Wamp.

Dica de Ouro: Se você não tem acesso ao arquivo de configuração (em uma hospedagem compartilhada, por exemplo), tente executar o comando SQL SET GLOBAL max_allowed_packet=67108864; direto no seu gerenciador de banco de dados, embora nem sempre os provedores permitam isso.

FAQ

O que é o max_allowed_packet?

É uma variável que define o tamanho máximo de um pacote de dados que o servidor pode receber…