Quando um cliente MySQL 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 MySQL 3.23 o maior pacote possível é 16M (devido a limites do protocolo cliente/servidor). No MySQL 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 MySQL ou um única linha enviada para o cliente.
Quando um cliente MySQL 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 MySQL 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 mysql
,
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 MySQL 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
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.