Vi una respuesta interesante a una pregunta sobre el BLOB más grande que puedas tener. Aquí está la declaración que vi en ServerFault: innodb_log_file_size e innodb_log_buffer_size combinados deben ser mayores que diez veces su objeto blob más grande si tiene muchos grandes .
Según esa publicación de ServerFault de Nils-Anders Nøttseter , debe consultar la tabla y averiguar qué BLOB es el más grande, multiplicar ese número por 11 o más, y usar esa respuesta como max_allowed_packet en adelante.
Es curioso que haya abordado otra pregunta en la que sugerí dimensionar el paquete max_allowed para, con suerte, resolver el problema .
CONSIDERACIÓN
De acuerdo con el libro
Esto es lo que dice la página 99 párrafos 1-3 sobre los paquetes MySQL:
El código de comunicación de red MySQL se escribió bajo el supuesto de que las consultas siempre son razonablemente cortas y, por lo tanto, el servidor puede enviarlas y procesarlas en un fragmento, que se denomina paquete en la terminología de MySQL. El servidor asigna la memoria para un búfer temporal para almacenar el paquete, y solicita lo suficiente para ajustarlo por completo. Esta arquitectura requiere una precaución para evitar que el servidor se quede sin memoria, un límite en el tamaño del paquete, lo que esta opción logra.
El código de interés en relación con esta opción se encuentra en
sql / net_serv.cc . Eche un vistazo a my_net_read () , luego siga la llamada a my_real_read () y preste especial atención a
net_realloc () .
Esta variable también limita la longitud de un resultado de muchas funciones de cadena. Vea sql / field.cc y
sql / intem_strfunc.cc para más detalles.
Saber esto acerca de los paquetes MySQL le permite a un DBA dimensionarlos para acomodar múltiples BLOBs dentro de un paquete MySQL, incluso si son odiosamente grandes.
Con respecto a su situación, debe averiguar cuál es el BLOB más grande en su base de datos, multiplique ese número por 11 y establezca su max_allowed_packet en ese número. Debería poder configurarlo para el servidor sin un reinicio de mysql (Personalmente, lo configuraría 256M porque resolvería otros problemas relacionados con la migración y la replicación, que está más allá del alcance de este foro). Para configurarlo en 256M para su base de datos para todas las conexiones entrantes, ejecute esto:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Luego, agregue esta configuración a my.cnf en la [mysqld]
sección:
[mysqld]
max_allowed_packet = 256M