MariaDB max_allowed_packet est une variable système qui indique la taille maximale qu’un paquet de données peut atteindre lors de la com­mu­ni­ca­tion entre la base de données et l’ap­pli­ca­tion. Les uti­li­sa­teurs qui trans­fè­rent de gros fichiers, de nombreux en­re­gis­tre­ments ou de longues commandes SQL se heurtent ra­pi­de­ment aux limites.

Qu’est-ce que MariaDB max_allowed_packet ?

La variable système max_allowed_packet est l’un des pa­ra­mètres de con­fi­gu­ra­tion les plus im­por­tants dans MariaDB et MySQL lorsqu’il s’agit de la stabilité et de la fiabilité des trans­ferts de données. Elle définit la taille maximale d’un seul paquet de données qu’un client (par exemple une ap­pli­ca­tion ou un script SQL) envoie à un serveur MariaDB ou reçoit de celui-ci. La valeur par défaut pré­con­fi­gu­rée varie selon le système, la dis­tri­bu­tion ou la version de MariaDB.

Un paquet de données dans MariaDB regroupe des ins­truc­tions SQL et des contenus échangés par le serveur ou le client via le réseau. Si une commande SQL comme INSERT avec de nom­breuses valeurs ou un BLOB (Binary Large Object), dépasse cette taille maximale, le serveur refuse l’exécution. Dans de tels cas, le message d’erreur suivant apparaît souvent :

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

Ce paramètre protège le serveur contre les requêtes sur­di­men­sion­nées qui peuvent po­ten­tiel­le­ment sur­char­ger les res­sources ou entraîner une ins­ta­bi­lité. Il permet également aux ad­mi­nis­tra­teurs d’ajuster la taille permise aux exigences de leur en­vi­ron­ne­ment.

Le serveur comme le client ont chacun leur propre valeur max_allowed_packet. La trans­mis­sion ne fonc­tionne que si les deux parties acceptent des paquets de la taille définie. Ainsi, si le serveur est configuré à 64 Mo, mais le client à 16 Mo seulement, l’envoi d’un paquet dépassant 16 Mo pourra échouer.

Compute Engine
La solution IaaS idéale pour gérer vos charges de travail
  • vCPU aux coûts avan­ta­geux et cœurs dédiés per­for­mants
  • Sans en­ga­ge­ment pour plus de flexi­bi­lité
  • As­sis­tance par des experts 24h/24 et 7j/7 incluse

Syntaxe de la commande MariaDB max_allowed_packet

MariaDB permet à la fois des ajus­te­ments tem­po­raires et per­ma­nents de max_allowed_packet. La syntaxe varie selon l’usage :

Changer tem­po­rai­re­ment max_allowed_packet pour une session

Si vous souhaitez ajuster la valeur de max_allowed_packet uni­que­ment pour une seule connexion, modifiez-la tem­po­rai­re­ment au niveau de la session.

SET SESSION max_allowed_packet = 67108864;
sql

Cette commande augmente la limite à 64 mé­gaoc­tets, mais uni­que­ment pour la connexion client actuelle.

Changer max_allowed_packet pour tout le serveur en cours d’exécution

Pour ajuster max_allowed_packet sur tout le serveur, dé­fi­nis­sez la valeur glo­ba­le­ment.

SET GLOBAL max_allowed_packet = 67108864;
sql

Ainsi, MariaDB définit la valeur pour toutes les con­nexions futures. Les sessions exis­tantes restent in­chan­gées. Le paramètre reste jusqu’au re­dé­mar­rage du serveur, et il convient aux ajus­te­ments per­ma­nents.

Cas d’usage typiques de max_allowed_packet

Dans de nombreux scénarios, la valeur par défaut de max_allowed_packet atteint ra­pi­de­ment ses limites. En par­ti­cu­lier lors de processus intensifs en données ou d’opé­ra­tions au­to­ma­ti­sées, un paramètre trop bas peut entraîner des erreurs ou des échecs. Les cas suivants re­pré­sen­tent des si­tua­tions typiques où un ajus­te­ment peut être utile :

  • Im­por­ta­tion de gros fichiers SQL : lorsque vous ré­ta­blis­sez une sau­ve­garde ou un dump de base de données contenant d’im­por­tantes quantités de données, la con­fi­gu­ra­tion par défaut peut ra­pi­de­ment être in­suf­fi­sante. Une valeur plus élevée empêche les in­ter­rup­tions.
  • Trai­te­ment de gros BLOB : les ap­pli­ca­tions stockant des fichiers binaires (par exemple des PDF, des images ou des archives ZIP) dans la base de données né­ces­si­tent souvent une valeur max_allowed_packet plus grande.
  • Nom­breuses valeurs dans INSERT : lorsque de grandes quantités de données sont écrites en une seule ins­truc­tion, comme lors des processus ETL ou des té­lé­char­ge­ments en masse, la taille du paquet augmente en con­sé­quence.
  • Ap­pli­ca­tions Web avec des for­mu­laires dy­na­miques ou des té­lé­char­ge­ments : les fra­me­works qui génèrent au­to­ma­ti­que­ment de grandes ins­truc­tions SQL at­teig­nent souvent la limite de paquet sans ajus­te­ment.

N’augmentez pas inu­ti­le­ment max_allowed_packet dans MariaDB, car cela peut affecter la con­som­ma­tion de mémoire et la stabilité. Une valeur de 16M à 64M suffit pour la plupart des ap­pli­ca­tions pro­duc­tives. Seuls des cas par­ti­cu­liers, comme les mi­gra­tions de bases de données, né­ces­si­tent des valeurs plus grandes.

Exemple d’uti­li­sa­tion de max_allowed_packet

Supposons que vous ex­ploi­tiez une ap­pli­ca­tion Web per­met­tant aux uti­li­sa­teurs de té­lé­char­ger des fichiers PDF jusqu’à 64 Mo dans la base de données. Une valeur standard réglée à 4 Mo ne suffit pas. Pour exploiter l’ap­pli­ca­tion de manière fiable, ajustez la valeur.

Ouvrez le fichier /etc/mysql/my.cnf sous Linux ou my.ini si vous utilisez Windows. Ajoutez l’entrée suivante sous [mysqld] :

max_allowed_packet=64M
txt

Re­dé­mar­rez le serveur MariaDB :

sudo systemctl restart mariadb
bash

Vérifiez la nouvelle valeur :

SHOW VARIABLES LIKE 'max_allowed_packet';
sql

Nous obtenons le résultat suivant :

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

L’ap­pli­ca­tion peut désormais traiter sans problème des paquets de données jusqu’à 64 Mo. Cela évite les erreurs, améliore la stabilité et permet un fonc­tion­ne­ment fluide même lors de trans­ferts de données plus im­por­tants.

Bases de données managées
Des bases de données gérées et sûres
  • Solutions flexibles, adaptées à vos besoins
  • Ar­chi­tec­ture de niveau pro­fes­sion­nel, gérée par des experts
  • Hébergées en Europe, con­for­mé­ment aux normes de pro­tec­tion des données les plus strictes
Aller au menu principal