Problemas Técnicos Programación

Error max_allowed_packet cuando intento subir un archivo de gran tamaño vía MySQL

Recientemente nos hemos encontrado con un problema en relación al proyecto de un cliente: Necesitábamos subir un Backup de una base de datos de, ¡Ojo! ¡5 Gigas!

Aunque el sentido común hubiese dictado realizar la importación del archivo en local utilizando un cliente como phpMyAdmin, como estábamos utilizando un servidor de pruebas y somos de la filosofía de que complicarse hace aprender, nos encontramos con el error max_allowed_packet.

Este error, también conocido como Mysql error 1153 got a packet bigger than ‘max_allowed_packet’ bytes en los logs, tiene dos problemas:

  1. El error no se muestra tal cual en phpMyAdmin, sino que éste deja de ejecutarse y muestra un pantallazo en blanco. Hay por lo tanto que acudir al log de errores de MySQL para encontrárselo.
  2. Dicho parámetro no puede incrementarse desde un panel de control tipo Plesk, por lo que hay que ir vía SSH a editar el archivo correspondiente.

Muy bien pero… ¿Cómo se soluciona?

Dado que ya has dado con el error, no vamos a entretenernos explicándote cómo conectarse por SSH ni cómo detectar el error en el log de MySQL. Vamos por tanto al meollo:

Editamos el archivo de configuración de MySQL:

En Odin/Plesk/CentOs:

vi /etc/my.cnf

 

TIP DE LOOPEANDO:

En SSH hay muchas formas de editar archivos, pero en este ejemplo usamos «vi«. Con «vi«, cuando editamos un archivo accedemos a él en modo sólo lectura, por lo que si deseamos editarlo hemos de pulsar la tecla «o».

Cuando finalicemos la edición, para guardar y salir hemos de pulsar la tecla «Esc» y escribir:

:wq

 

Por defecto no viene especificado el parámetro en cuestión, por lo que debemos agregarlo:

max_allowed_packet=16M

Asignándole el tamaño deseado y quedando algo como:

También es buena idea aprovechar e incrementar también el parámetro wai_timeout, ya que en caso contrario será el siguiente error MySQL que se nos va mostrar. La mecánica, como puede verse en la imagen superior, es la misma:

wait_timeout=3600

Hecho ésto, cerramos, guardamos y reiniciamos el servicio o el servidor:

service mysqld restart

o bien:

/etc/init.d/mysqld restart

O en el caso de que utilicemos mariadb (Linux v.7 en adelante):

systemctl restart mariadb

 

Si hemos tenido suerte, con esto se solventa el problema. En caso contrario podemos encontrarnos con el error max_execution time. En ese caso, aquí te explicamos cómo hacerle frente.

 

 

Cristian Sarabia Martínez

Desde que a principios de los 90 mi padre desempolvó su Spectrum, no he dejado de probar y experimentar con la tecnología.

Enamorado del mundo web, Full Stack Developer de profesión y diseñador por devoción.

Ahora hago mis pinitos en esto del blogging para compartir con vosotros un poquito de todo lo que la comunidad me ha dado.

Escribir comentario

Haz clic aquí para dejar tu comentario