Vi uma resposta interessante a uma pergunta sobre o maior BLOB que você possa ter. Aqui está a declaração que vi no ServerFault: innodb_log_file_size e innodb_log_buffer_size combinados devem ser maiores que dez vezes o seu maior objeto de blob, se você tiver muitos grandes .
Com base na publicação ServerFault da Nils-Anders Nøttseter , você deve consultar a tabela e descobrir qual BLOB é o maior, multiplicar esse número por 11 ou mais e usar essa resposta como o max_allowed_packet daqui para frente.
É engraçado que eu tenha abordado outra questão em que sugeri dimensionar o pacote max_allowed para resolver o problema .
EMBARGO
De acordo com o livro
Aqui está o que os parágrafos 1-3 dizem sobre os pacotes MySQL:
O código de comunicação de rede do MySQL foi escrito sob a suposição de que as consultas são sempre razoavelmente curtas e, portanto, podem ser enviadas e processadas pelo servidor em um pedaço, chamado de pacote na terminologia do MySQL. O servidor aloca a memória para um buffer temporário para armazenar o pacote e solicita o suficiente para ajustá-lo totalmente. Essa arquitetura requer uma precaução para evitar que o servidor fique sem memória - um limite para o tamanho do pacote, que essa opção realiza.
O código de interesse em relação a esta opção é encontrado em
sql / net_serv.cc . Dê uma olhada em my_net_read () , siga a chamada para my_real_read () e preste atenção especial a
net_realloc () .
Essa variável também limita o comprimento de um resultado de muitas funções de string. Veja sql / field.cc e
sql / intem_strfunc.cc para obter detalhes.
Saber isso sobre os pacotes MySQL permite que um DBA os dimensione para acomodar vários BLOBs dentro de um pacote MySQL, mesmo que sejam desagradáveis.
Em relação à sua situação, você deve descobrir qual é o maior BLOB do seu banco de dados, multiplicar esse número por 11 e definir seu max_allowed_packet para esse número. Você deve configurá-lo para o servidor sem reiniciar o mysql (Pessoalmente, eu o configuraria 256M, pois ele resolveria outros problemas relacionados à migração e replicação, que estão além do escopo deste fórum). Para configurá-lo para 256M no seu banco de dados para todas as conexões de entrada, execute o seguinte:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Depois, adicione essa configuração ao my.cnf na [mysqld]
seção:
[mysqld]
max_allowed_packet = 256M