Ho visto una risposta interessante a una domanda sul BLOB più grande che potresti avere. Ecco la dichiarazione che ho visto in ServerFault: innodb_log_file_size e innodb_log_buffer_size combinati devono essere più grandi di dieci volte il tuo oggetto BLOB più grande se ne hai molti di grandi .
Sulla base di quel post ServerFault di Nils-Anders Nøttseter , dovresti interrogare la tabella e scoprire quale BLOB è il più grande, moltiplicare quel numero per 11 o più e usare quella risposta come max_allowed_packet andando avanti.
È divertente che abbia rivolto un'altra domanda in cui ho suggerito di ridimensionare il pacchetto max_allowed per risolvere il problema .
AVVERTIMENTO
Secondo il libro
Ecco cosa dicono i pacchetti MySQL:
Il codice di comunicazione della rete MySQL è stato scritto partendo dal presupposto che le query sono sempre ragionevolmente brevi e pertanto possono essere inviate ed elaborate dal server in un unico blocco, che viene chiamato pacchetto nella terminologia MySQL. Il server alloca la memoria per un buffer temporaneo per archiviare il pacchetto e richiede abbastanza per adattarlo interamente. Questa architettura richiede una precauzione per evitare che il server esaurisca la memoria, ovvero un limite alla dimensione del pacchetto, che questa opzione consente.
Il codice di interesse in relazione a questa opzione si trova in
sql / net_serv.cc . Dai un'occhiata a my_net_read () , quindi segui la chiamata a my_real_read () e presta particolare attenzione a
net_realloc () .
Questa variabile limita anche la lunghezza di un risultato di molte funzioni stringa. Vedi sql / field.cc e
sql / intem_strfunc.cc per i dettagli.
Sapere questo sui pacchetti MySQL consente a un DBA di dimensionarli per adattarsi a più BLOB all'interno di un pacchetto MySQL, anche se sono eccessivamente grandi.
Per quanto riguarda la tua situazione, dovresti scoprire qual è il BLOB più grande nel tuo database, moltiplicare quel numero per 11 e impostare max_allowed_packet su quel numero. Dovresti essere in grado di impostarlo per il server senza un riavvio mysql (Personalmente, lo imposterei 256M perché affronterebbe altri problemi riguardanti la migrazione e la replica, che va oltre lo scopo di questo forum). Per impostarlo su 256 M per il database per tutte le connessioni in entrata, eseguire questo:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Successivamente, aggiungi questa impostazione a my.cnf nella [mysqld]
sezione:
[mysqld]
max_allowed_packet = 256M