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
.