MariaDB max_allowed_packet es una variable de sistema que establece el tamaño máximo de los paquetes de datos entre la base de datos y la apli­ca­ción. Si trabajas con archivos pesados, numerosos registros o consultas SQL largas, puedes en­co­n­trar­te con límites si no ajustas este valor co­rre­c­ta­me­n­te.

¿Qué es MariaDB max_allowed_packet?

La variable de sistema max_allowed_packet es uno de los pa­rá­me­tros de co­n­fi­gu­ra­ción más im­po­r­ta­n­tes en MariaDB y MySQL, ya que influye di­re­c­ta­me­n­te en la es­ta­bi­li­dad y fia­bi­li­dad de las tra­n­s­fe­re­n­cias de datos. Esta variable define el tamaño máximo de un paquete de datos que un cliente, como una apli­ca­ción o un script SQL, puede enviar a un servidor MariaDB o recibir de este. El valor pre­de­te­r­mi­na­do varía según el sistema, la di­s­tri­bu­ción o la versión de MariaDB.

En MariaDB, un paquete de datos agrupa in­s­tru­c­cio­nes SQL y co­n­te­ni­dos que se tra­n­s­mi­ten entre servidor y cliente a través de la red. Si una in­s­tru­c­ción SQL, por ejemplo, un INSERT con numerosos valores o un BLOB (Binary Large Object), supera el tamaño máximo co­n­fi­gu­ra­do, el servidor rechaza la operación. En esos casos suele aparecer el siguiente error:

ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
sql

Este parámetro protege al servidor frente a so­li­ci­tu­des ex­ce­si­va­me­n­te grandes que podrían saturar los recursos o provocar ine­s­ta­bi­li­dad. Al mismo tiempo, ofrece a los ad­mi­ni­s­tra­do­res la po­si­bi­li­dad de ajustar el tamaño permitido a las ne­ce­si­da­des concretas de su entorno.

Es im­po­r­ta­n­te saber que tanto el servidor como el cliente tienen su propio valor de max_allowed_packet. La tra­n­s­mi­sión solo será posible si ambos aceptan paquetes del mismo tamaño. Por ejemplo, si el servidor está co­n­fi­gu­ra­do en 64 MB, pero el cliente en solo 16 MB, cualquier paquete superior a 16 MB fallará igua­l­me­n­te.

Sintaxis de MariaDB max_allowed_packet

MariaDB permite ajustar max_allowed_packet tanto de forma temporal como pe­r­ma­ne­n­te. La sintaxis varía según el caso de uso:

Cambiar max_allowed_packet te­m­po­ra­l­me­n­te para una sesión

Si solo quieres modificar el valor de max_allowed_packet en una conexión concreta, puedes hacerlo de manera temporal a nivel de sesión:

SET SESSION max_allowed_packet = 67108864;
sql

Este comando eleva el límite a 64 MB, pero úni­ca­me­n­te para la conexión activa del cliente.

Cambiar max_allowed_packet glo­ba­l­me­n­te (a nivel de servidor) en tiempo de ejecución

Si deseas ajustar max_allowed_packet en todo el servidor, debes definir el valor de forma global:

SET GLOBAL max_allowed_packet = 67108864;
sql

Con este comando, MariaDB aplica el nuevo valor a todas las co­ne­xio­nes futuras. Las sesiones ya abiertas no se ven afectadas. La co­n­fi­gu­ra­ción se mantiene hasta que se reinicie el servidor, por lo que resulta adecuada para ajustes pe­r­si­s­te­n­tes durante la ejecución.

Casos de uso típicos de max_allowed_packet

En muchos es­ce­na­rios, el valor pre­de­te­r­mi­na­do de max_allowed_packet puede quedarse corto rá­pi­da­me­n­te. En procesos con gran volumen de datos o en tareas au­to­ma­ti­za­das, un límite demasiado bajo provoca errores o in­te­rru­p­cio­nes. Estos son algunos casos ha­bi­tua­les en los que conviene ajustarlo:

  • Im­po­r­ta­ción de grandes volcados SQL: al restaurar un backup o un dump de base de datos con muchos datos, el valor pre­de­te­r­mi­na­do suele ser in­su­fi­cie­n­te. Aumentar este valor evita que el proceso se in­te­rru­m­pa.
  • Pro­ce­sa­mie­n­to de objetos binarios grandes (BLOB): apli­ca­cio­nes que almacenan archivos binarios (por ejemplo, PDF, imágenes o archivos ZIP) suelen requerir un valor mayor de max_allowed_packet.
  • Inserción de numerosos valores en un único INSERT: cuando se escriben grandes ca­n­ti­da­des de datos en una sola sentencia, como en procesos ETL o cargas masivas, el tamaño de los paquetes aumenta co­n­si­de­ra­ble­me­n­te.
  • Apli­ca­cio­nes web con fo­r­mu­la­rios dinámicos o cargas de archivos: fra­me­wo­r­ks que generan au­to­má­ti­ca­me­n­te se­n­te­n­cias SQL extensas pueden alcanzar fá­ci­l­me­n­te el límite si no se ajusta el parámetro.

No obstante, no conviene aumentar max_allowed_packet más de lo necesario, ya que puede re­pe­r­cu­tir en el consumo de memoria y la es­ta­bi­li­dad. En la mayoría de los entornos pro­du­c­ti­vos, un valor entre 16M y 64M es su­fi­cie­n­te. Solo en casos es­pe­cia­les, como las mi­gra­cio­nes de bases de datos, resulta útil co­n­fi­gu­rar un tamaño más elevado.

Ejemplo de uso de max_allowed_packet

Imagina que gestionas una apli­ca­ción web en la que los usuarios pueden subir archivos PDF de hasta 64 MB di­re­c­ta­me­n­te a la base de datos. Con el valor estándar de 4 MB esto no sería posible. Para ga­ra­n­ti­zar un fu­n­cio­na­mie­n­to estable, debes ajustar la co­n­fi­gu­ra­ción.

Abre el archivo /etc/mysql/my.cnf en Linux o my.ini en Windows y añade lo siguiente bajo la sección [mysqld]:

max_allowed_packet=64M
txt

Reinicia el servidor MariaDB:

sudo systemctl restart mariadb
bash

Comprueba el nuevo valor:

SHOW VARIABLES LIKE 'max_allowed_packet';
sql

El resultado será el siguiente:

+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| max_allowed_packet  | 67108864 |
+---------------------+----------+
sql

De esta forma, la apli­ca­ción podrá procesar paquetes de hasta 64 MB sin problemas. De este modo evitas errores, mejoras la es­ta­bi­li­dad y ga­ra­n­ti­zas un fu­n­cio­na­mie­n­to fluido incluso en tra­n­s­fe­re­n­cias de gran tamaño.

Manage Databases
Managed Database von IONOS

Bases de datos a medida de tus ne­ce­si­da­des. Incluye soporte 24/7.

  • Ar­qui­te­c­tu­ra de primera
  • Soporte 24/7
  • Centros de datos ce­r­ti­fi­ca­dos
Ir al menú principal