Resumo: Para aumentar o
max_allowed_packetde forma permanente, adicionamax_allowed_packet=1Gem[mysqld]nomy.cnfe reinicia o MySQL. Para uma correção imediata sem reinício, executaSET GLOBAL max_allowed_packet=1073741824;num cliente MySQL. Confirma a alteração comSHOW VARIABLES LIKE 'max_allowed_packet';.
Contents

Quando o MySQL recebe uma query com um pacote de dados maior do que o valor de max_allowed_packet, lança um erro "Packet too large" e fecha a ligação. Este é um erro comum do MySQL em ambientes WordPress. Aparece durante um push do WP STAGING, importações grandes de bases de dados e migrações de sites. O valor predefinido está baixo em relação ao que sites WordPress grandes precisam, mas aumentá-lo é simples assim que identificas o método certo para o teu ambiente de Hosting.
Por exemplo, se o restauro de um Backup do WP STAGING falhar devido a um tamanho de pacote demasiado pequeno, a mensagem de erro mostra o tamanho da query problemática para que possas ajustar o max_allowed_packet em conformidade. Na versão atual do WP STAGING, o Plugin regula e executa queries de base de dados dinamicamente com base no tamanho máximo de pacote permitido no servidor, mas o limite subjacente do MySQL continua a aplicar-se a importações diretas e ferramentas de terceiros.
Tens duas opções para alterar o tamanho max_allowed_packet do MySQL: uma alteração permanente no ficheiro de configuração do MySQL e uma alteração temporária via SQL. Ambas são cobertas abaixo.
O que o max_allowed_packet controla
A variável de sistema max_allowed_packet define o tamanho máximo de um único pacote de comunicação entre o cliente e o servidor MySQL. Quando uma query, linha de resultado ou definição de stored routine excede este limite, o MySQL termina a ligação e regista um erro.
Padrões comuns de sintomas:
- "Packet too large": o MySQL rejeita imediatamente a query.
- "MySQL server has gone away": a ligação cai durante uma importação demorada.
- Falhas de push ou restauro no WP STAGING quando o site contém grandes revisões de publicações, valores de opções serializados ou metadados de imagens guardados como post meta.
- Erros durante o restauro com
mysqldumpou importação por phpMyAdmin.
Na nossa fila de suporte, o motivo mais comum é um push do WP STAGING que inclui bibliotecas grandes de imagens ou revisões de publicações guardadas como post meta. Também vimos isto bloquear migrações para um novo Hosting. Apanhar o limite antes de uma migração evita falhas de importação a meio da transferência.
Que método devo usar?
| O teu ambiente | Melhor método |
|---|---|
| VPS ou servidor dedicado com acesso SSH | Editar my.cnf (permanente) |
| Hosting partilhado (sem SSH) | Contacta o fornecedor de Hosting; o phpMyAdmin permite inspecionar o valor atual mas não o alterar permanentemente |
| AWS RDS for MySQL | Modificar um DB parameter group na consola AWS |
| DigitalOcean Managed MySQL | Definir através do separador "Configuration" no painel |
| Necessitas de correção imediata sem reinício | Comando SQL SET GLOBAL (temporário, reinicia ao reiniciar) |
Se não tens a certeza de que ficheiro de configuração o MySQL está a ler, executa mysql --verbose --help | grep my.cnf num terminal para veres a ordem completa de procura.
Como definir max_allowed_packet de forma permanente
Uma alteração permanente sobrevive a reinícios do servidor MySQL. O método depende do teu ambiente de Hosting.
Antes de alterares seja o que for, verifica o valor atual para saberes o teu ponto de partida. Num servidor com acesso SSH, executa SHOW VARIABLES LIKE 'max_allowed_packet'; num cliente MySQL; em Hosting partilhado, abre phpMyAdmin e depois Variables, e procura por max_allowed_packet. Define o novo valor com folga acima do maior pacote que esperas: quando um restauro ou importação falha, a mensagem de erro indica o tamanho da query problemática, por isso usa esse número como limite mínimo.
VPS ou servidor dedicado: editar my.cnf
1. Abre o ficheiro de configuração do MySQL. Abre my.ini (Windows) ou my.cnf (Linux ou macOS) na diretoria de instalação do servidor MySQL. Na maioria dos sistemas Linux o ficheiro está em /etc/mysql/my.cnf ou /etc/my.cnf. Se não tens a certeza de que ficheiro o MySQL lê, verifica primeiro o caminho exato com mysql --verbose --help | grep my.cnf.
2. Localiza a secção [mysqld]. A diretiva tem de ir em [mysqld], não em [mysql] ou [client]. Colocá-la na secção errada é a razão mais comum para a correção parecer funcionar mas não ter efeito.
3. Define o valor. Encontra ou adiciona a linha max_allowed_packet em [mysqld]. Para definir o valor para 1 GB:
[mysqld]
max_allowed_packet=1G
4. Guarda o ficheiro e reinicia o MySQL.
sudo systemctl restart mysql
5. Verifica o novo valor.
SHOW VARIABLES LIKE 'max_allowed_packet';
Hosting partilhado: inspecionar via phpMyAdmin
Em Hosting partilhado sem acesso SSH, podes verificar o valor atual de max_allowed_packet navegando em phpMyAdmin e depois Variables, e procurando por max_allowed_packet. Para o aumentar permanentemente, contacta o teu fornecedor de Hosting, porque esta é uma definição a nível de servidor que requer acesso administrativo fora do painel partilhado.
Bases de dados geridas: AWS RDS e DigitalOcean
Serviços MySQL geridos em cloud expõem a variável através dos respetivos painéis em vez de um ficheiro de configuração:
- AWS RDS for MySQL: abre a instância de base de dados na consola AWS, navega até ao parameter group associado e define o
max_allowed_packet. Aplica o parameter group atualizado e reinicia a instância para a alteração ter efeito. - DigitalOcean Managed MySQL: navega até ao separador Configuration do teu cluster de base de dados e atualiza aí o
max_allowed_packet.
Em ambas as plataformas, define o valor antes de uma migração para um novo Hosting grande para que a importação não falhe a meio do processo.
Como definir max_allowed_packet temporariamente
A variável max_allowed_packet pode ser definida globalmente com um único comando SQL. Isto entra em vigor imediatamente, sem necessidade de reinício, mas o valor é reposto quando o servidor MySQL reinicia. Faz sempre o follow-up com a edição permanente do my.cnf se precisares que a alteração persista.
Para alterar o max allowed packet para todos para 1 GB até o servidor reiniciar:
SET GLOBAL max_allowed_packet=1073741824;
Verifica imediatamente:
SHOW VARIABLES LIKE 'max_allowed_packet';
Este método é útil para desbloquear um restauro ou importação que está a falhar neste momento, ou para testar o valor correto antes de o comprometer no ficheiro de configuração.
O que fazer se a correção não tiver efeito
Se SHOW VARIABLES LIKE 'max_allowed_packet'; continuar a devolver o valor antigo após a alteração, percorre este checklist:
1. Secção de configuração errada. A diretiva tem de estar em [mysqld]. Abre o ficheiro e confirma o cabeçalho da secção imediatamente acima da linha max_allowed_packet.
2. Ficheiro de configuração errado. O MySQL lê vários ficheiros numa ordem específica e o último valor correspondente ganha. Verifica o caminho de procura real:
mysql --verbose --help | grep my.cnf
3. O MySQL não foi reiniciado. Confirma que o serviço reiniciou com sucesso:
sudo systemctl status mysql
4. Ficheiro não guardado ou não legível. Verifica se o ficheiro foi guardado e se o MySQL tem permissão de leitura.
5. Nós replicados. Num ambiente replicado, o SET GLOBAL aplica-se apenas ao nó ao qual te ligaste. Cada réplica requer a sua própria atualização do ficheiro de configuração.
6. Limite no lado do cliente. Alguns clientes de base de dados definem max_allowed_packet no momento da ligação. Se o valor do cliente for inferior ao do servidor, aplica-se o limite do cliente independentemente da definição do servidor.
Já vimos a correção falhar silenciosamente quando o cabeçalho da secção [mysqld] faltava num my.cnf recém-provisionado que continha apenas entradas [mysql]. O MySQL analisa o ficheiro sem erros mas ignora a diretiva.
Os erros de limite de memória do servidor aparecem por vezes ao lado de erros de pacote MySQL no mesmo ficheiro de log. Vê os erros de PHP memory_limit esgotado para essa correção, que segue a mesma disciplina de secção de configuração. Para o limite max_input_vars do PHP, editar o ficheiro de configuração do servidor resolve o problema da mesma forma.
Artigos relacionados
- Como aumentar o limite max_input_vars do PHP no WordPress
- Como aumentar o tamanho máximo de upload no WordPress
- Como alterar o prefixo de tabelas do WordPress da base de dados MySQL
- 3 formas de alterar o prefixo de tabelas da base de dados do WordPress
- Resolver a extensão PHP MySQL em falta no WordPress
- Tutorial de reparação e otimização de tabelas com phpMyAdmin
- Erro MySQL – "Row size too large" ao restaurar um Backup