Lo primero que pensé fue en lo que realmente controla max_allowed_packet . Aquí está lo que encontré:
De acuerdo con la página 99 de "Comprender los componentes internos de MySQL" (ISBN 0-596-00957-7) , aquí están los párrafos 1-3 que lo explican:
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.
Dada esa definición de max_allowed_packet, descubrí algo más de ServerFault: innodb_log_file_size e innodb_log_buffer_size combinados deben ser más grandes que diez veces su objeto blob más grande si tiene muchos objetos grandes
Teniendo en cuenta estas dos cosas, aumentaría innodb_log_file_size en /etc/my.cnf al tamaño máximo permitido, 2047M. Por supuesto, esto requiere lo siguiente
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start
Esto acomodará cualquier gran blobs que pueda tener en sus datos.