# MariaDB max\_allowed\_packet : définir la taille maximale des paquets de données

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 communication entre la base de données et l’application. Les utilisateurs qui transfèrent de gros fichiers, de nombreux enregistrements ou de longues commandes SQL se heurtent rapidement aux limites.

## Qu’est-ce que MariaDB `max_allowed_packet` ?

La variable système `max_allowed_packet` est l’un des paramètres de configuration les plus importants dans [MariaDB](https://www.ionos.fr/digitalguide/serveur/know-how/mariadb-cest-quoi/) et [MySQL](https://www.ionos.fr/digitalguide/serveur/know-how/apprendre-mysql-en-toute-simplicite/) lorsqu’il s’agit de la stabilité et de la fiabilité des transferts de données. Elle définit la **taille maximale d’un seul paquet de données** qu’un client (par exemple une application ou un script SQL) envoie à un serveur MariaDB ou reçoit de celui-ci. La valeur par défaut préconfigurée varie selon le système, la distribution ou la version de MariaDB.

Un paquet de données dans MariaDB regroupe des instructions SQL et des contenus échangés par le serveur ou le client via le réseau. Si une commande SQL comme `INSERT` avec de nombreuses valeurs ou un [BLOB](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/binary-large-object/) (*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 :

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

Ce paramètre protège le serveur contre les requêtes surdimensionnées qui peuvent potentiellement surcharger les ressources ou entraîner une instabilité. Il permet également aux administrateurs d’ajuster la taille permise aux exigences de leur environnement.

Le serveur comme le client ont chacun leur propre valeur `max_allowed_packet`. La transmission ne fonctionne 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.

## Syntaxe de la commande MariaDB `max_allowed_packet`

MariaDB permet à la fois des ajustements temporaires et permanents de `max_allowed_packet`. La syntaxe varie selon l’usage :

### Changer temporairement `max_allowed_packet` pour une session

Si vous souhaitez ajuster la valeur de `max_allowed_packet` uniquement pour une seule connexion, modifiez-la temporairement au niveau de la session.

```sql
SET SESSION max_allowed_packet = 67108864;
```

Cette commande augmente la limite à 64 mégaoctets, mais uniquement 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éfinissez la valeur globalement.

```sql
SET GLOBAL max_allowed_packet = 67108864;
```

Ainsi, MariaDB définit la valeur pour toutes les connexions futures. Les sessions existantes restent inchangées. Le paramètre reste jusqu’au redémarrage du serveur, et il convient aux ajustements permanents.

## Cas d’usage typiques de `max_allowed_packet`

Dans de nombreux scénarios, la valeur par défaut de `max_allowed_packet` atteint rapidement ses limites. En particulier lors de processus intensifs en données ou d’opérations automatisées, un paramètre trop bas peut entraîner des erreurs ou des échecs. Les cas suivants représentent des situations typiques où un ajustement peut être utile :

- **Importation de gros fichiers SQL** : lorsque vous rétablissez une sauvegarde ou un dump de base de données contenant d’importantes quantités de données, la configuration par défaut peut rapidement être insuffisante. Une valeur plus élevée empêche les interruptions.
- **Traitement de gros BLOB** : les applications stockant des fichiers binaires (par exemple des PDF, des images ou des archives ZIP) dans la base de données nécessitent souvent une valeur `max_allowed_packet` plus grande.
- **Nombreuses valeurs dans `INSERT`** : lorsque de grandes quantités de données sont écrites en une seule instruction, comme lors des processus ETL ou des téléchargements en masse, la taille du paquet augmente en conséquence.
- **Applications Web avec des formulaires dynamiques ou des téléchargements** : les frameworks qui génèrent automatiquement de grandes instructions SQL atteignent souvent la limite de paquet sans ajustement.

N’augmentez pas inutilement `max_allowed_packet` dans MariaDB, car cela peut affecter la consommation de mémoire et la stabilité. Une valeur de `16M` à `64M` suffit pour la plupart des applications productives. Seuls des cas particuliers, comme les migrations de bases de données, nécessitent des valeurs plus grandes.

## Exemple d’utilisation de `max_allowed_packet`

Supposons que vous exploitiez une application Web permettant aux utilisateurs de télécharger 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’application 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]` :

```txt
max_allowed_packet=64M
```

Redémarrez le serveur MariaDB :

```bash
sudo systemctl restart mariadb
```

Vérifiez la nouvelle valeur :

```sql
SHOW VARIABLES LIKE 'max_allowed_packet';
```

Nous obtenons le résultat suivant :

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

L’application 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 fonctionnement fluide même lors de transferts de données plus importants.


This is a markdown version of: [https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/mariadb-max-allowed-packet/](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/mariadb-max-allowed-packet/) for AI/LLM consumption.