Lorsqu'un client MySQL ou le serveur mysqld
re¸oit un paquet plus grand que
max_allowed_packet
octets, il provoque une
erreur Packet too large
et ferme la
connexion.
En MySQL 3.23 le plus gros paquet possible est 16M (à cause des limites du protocole client/serveur). En MySQL 4.0.1 et plus, cela n'est plus limité que par la quantité de mémoire que vous avez sur votre serveur (cela va théoriquement à un maximum de 2G).
Un paquet de communication est une simple commande SQL envoyée au serveur, ou une simple ligne renvoyée au client.
Lorsqu'un client MySQL ou que le serveur
mysqld
re¸oit un paquet plus grand que
max_allowed_packet
octets, il provoque une
erreur Packet too large
et ferme la
connexion. avec quelques clients, vous pouvez aussi obtenir
l'erreur Lost connection to MySQL server during
query
si le paquet est trop grand.
Notez que le client et le serveur ont chacun leur propre
variable max_allowed_packet
. Si vous voulez
gérer les gros paquets, vous devrez changer cette variable
côté client et côté serveur.
Si utilisez le client mysql
, la variable
max_allowed_packet
vaut par défaut 16Mo.
C'est aussi la valeur maximale avant MySQL 4.0. Pour lui donner
une valeur maximale plus grande, depuis 4.0, lancez
mysql
comme ceci :
mysql> mysql --max_allowed_packet=32M
Cela fixe une taille de paquet à 32Mo.
La valeur par défaut de max_allowed_packet
est 1Mo. Vous pouvez augmenter cette valeur si le serveur doit
gérer de grosses requêtes (par exemple, si vous travaillez
avec de grandes colonnes BLOB
). Par exemple,
pour modifier la variable en lui donnant une valeur de 16 MO,
lancez le serveur comme ceci :
mysql> mysqld --max_allowed_packet=16M
Avant MySQL 4.0, utilisez cette syntaxe :
mysql> mysqld --set-variable=max_allowed_packet=16M
Vous pouvez aussi utiliser le fichier d'options pour spécifier
la valeur de max_allowed_packet
. Par exemple,
pour spécifier une valeur de 16M0, ajoutez la ligne suivante
dans le fichiers d'options :
[mysqld] max_allowed_packet=16M
Avant MySQL 4.0, utilisez cette syntaxe :
[mysqld] set-variable = max_allowed_packet=16M
Il n'est pas dangereux d'augmenter cette valeur étant donné que la mémoire n'est alloué que lorsque besoin en est. Cette variable est plus une précaution pour capturer les paquets erronés qui circulent entre le client et le serveur. Elle sert aussi a vous assurer que vous n'utilisez pas accidentellement de gros paquets qui consommeront toute la mémoire.
Si vous utilisez le client mysql
, vous pouvez
spécifier un plus grand tampon en démarrant le client avec
mysql --set-variable=max_allowed_packet=8M
.
Les autres clients ont différentes méthodes pour configurer
cette variable. Notez que --set-variable
est
désapprouvée depuis MySQL 4.0, utilisez
--max-allowed-packet=8M
à la place.
Vous pouvez utiliser le fichier d'options pour augmenter la
taille de max_allowed_packet
dans
mysqld
. Par exemple, si vous vous attendez à
stocker la totalité d'un MEDIUMBLOB
dans une
table, vous aurez besoin de démarrer le serveur avec l'option
set-variable=max_allowed_packet=16M
.
Vous pouvez aussi rencontrer d'étranges problèmes avec les
gros paquets si vous utilisez les grands blob, mais que vous
n'avez pas donné à mysqld
l'accès à assez
de mémoire pour gérer ces requêtes. Si vous pensez être dans
ce cas, essayez d'ajouter ulimit -d 256000
au
début du script safe_mysqld
et redémarrez
mysqld
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.