Erro: Packet too large


Quando um cliente MariaDB ou o servidor mysqld recebe um pacote maior que max_allowed_packet bytes, ele envia o erro Packet too large e fecha a conexão.

No MariaDB 3.23 o maior pacote possível é 16M (devido a limites do protocolo cliente/servidor). No MariaDB 4.0.1 e acima el só é limitado pela quantidade de memória que você tem no seu servidor (até um máximo teórico de 2GB).

Um pacote de conexão é uma única instrução SQL enviada ao servidor MariaDB ou um única linha enviada para o cliente.

Quando um cliente MariaDB ou o servidor mysqld obtem um pacote maior que max_allowed_packet bytes, ele envia o erro Packet too large e fecha a conexão. Com alguns clientes você também pode obter o erro Lost connection to MariaDB server during query se o pacote de comunicação for muito grande.

Note que tanto o cliente quanto o servidor tem a sua própria variável max_allowed_packet. Se você quiser tratar os pacotes grandes, você tem que aumentar esta variável tanto no cliente quanto no servidor.

É seguro aumentar esta variável já que a memória só é alocada quando necessário; esta variável é mais uma precaução para pegar pacotes errados entre o cliente/servidor e também para assegurar que você use pacotes grandes acidentalemente e assim fique sem memória.

Se você estiver usando o cliente MariaDB, você pode especificar um buffer maior iniciando o cliente com mysql --set-variable=max_allowed_packet=8M. Outros clientes tem métodos diferentes de configurar esta variável. Por favor, note que --set-variable está obsoleta desde o MariaDB 4.0, em seu lugar utilize --max-allowed-packet=8M.

Você pode utilizar o arquivo de opção para definir max_allowed_packet com um tamanho maior no mysqld. Por exemplo, se você está esperando armazenar o tamanho total de um MEDIUMBLOB em uma tabela, você precisará iniciar o servidor com a opção set-variable=max_allowed_packet=16M.

Você também pode obter problemas estranhos com pacotes grandes se você estiver usando blobs grandes, mas você não deu para mysqld accesso a memória suficiente para tratar a consulta. Se você suspeita que este é o caso, tente adicionar ulimit -d 256000 no inicio do script mysqld_safe e reinicie o mysqld.

Retornar