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
text

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.

IONOS CLOUD 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 :

Augmenter max_allowed_packet pour une seule connexion

Vous ne pouvez pas modifier a pos­te­riori la valeur d’une session déjà en cours : dans MariaDB, max_allowed_packet n’est dynamique qu’au niveau global, et la valeur est en lecture seule au niveau de la session. Un SET SESSION max_allowed_packet échoue donc avec l’erreur ERROR 1621. Pour une seule connexion, indiquez plutôt la valeur au démarrage du client :

mysql --max-allowed-packet=67108864 -u root -p
bash

Le client accepte ainsi des paquets jusqu’à 64 Mo. Comme le client et le serveur ont chacun leur propre valeur, le serveur doit autoriser au moins la même valeur.

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
ini

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 |
+---------------------+----------+
text

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