Cuando nos dedicamos a migrar bases de datos, importar grandes cantidades e datos, o simplemente realizamos pruebas en mysql, nos podemos encontrar con problemas como Got a packet bigger than ‘max_allowed_packet’ bytes.Este tipo de problema no solo puede surgirnos en el ámbito profesional, sino que si somos aficionados también podemos encontrarnos con él, en concreto la última vez que lo he visto aparecer ha sido en alguna instalación de wordpress que estaba moviendo entre bases de datos.
Cómo solucionarGot a packet bigger than ‘max_allowed_packet’ bytes
Este problema viene a raíz de una limitación en la configuración de MySQL está pensada para ejecutar consultas de un tamaño moderado, es decir, por lo general cortas. Esto hace que cuando queremos ejecutar una consulta relativamente grande, podamos pasarnos del límite establecido, llamado límite de paquetes. Esto es así por que a la hora de ejecutar la consulta, el servidor va a reservar en RAM la cantidad de memoria necesaria para ejecutar el paquete, y de esta forma evitamos colapsarlo con consultas demasiado grandes que por lo general no son necesarias.
En este caso como lo que estamos realizando es una importación lo haremos de forma puntual, únicamente a la hora de cargar un archivo.sql dentro de una base de datos, para así evitar que la configuración pueda poner en peligro la integridad o seguridad de nuestras bases de datos. Recuerda que las consultas pueden saturar tu servidor o máquina, por lo que no es recomendable dejar un valor fijo muy elevado.
Si estamos usando el comando mysql para ejecutar un sql usaremos el comando –max_allowed_packet, que nos permitirá asignar el tamaño de paquete que queremos establecer como límite. Para cargar el archivo en una base de datos ejecutaremos la siguiente consulta:
mysql --max_allowed_packet=100M -u usuario -p mi_base_de_datos < miarchivo.sql
Como puedes ver le hemos asignado 100MB a esta importación, pero de ser necesario puedes asignar todo el tamaño que quieras, recuerda que no son cambios permanentes y te valdrán solo para ejecutar una vez.
En caso de querer hacerlo permanente puedes editar el archivo /etc/my.ini o /etc/my.cnf y buscar la línea correspondiente
nano /etc/my.cnf max_allowed_packet=500M
Le pones el valor en megas que mejor te venga, pero recuerda no pasarte 3 pueblos ya que puedes hacer caer en picado el rendimiento del servidor, lo mejor será optimizar las consultas.
Solo te queda reiniciar el servicio de mysql
CentOS service mysqld restart Debian service mysql restart
¿Con qué proceso te ha salido este error? ¿Algún CMS en concreto?