Cette section couvre aussi l'erreur Lost connection to
server during query
.
Le plus souvent, l'erreur MySQL server has gone
away
se produit lorsque le serveur a dépassé le
délai d'attente d'actions et a clos la connexion. Par défaut,
le serveur clos la connexion après 8 heures si rien n'est
arrivé. Vous pouvez changer cette limite en configurant le
paramètre wait_timeout
lorsque vous
démarrez mysqld
.
Une autre raison de recevoir l'erreur MySQL server has
gone away
est d'avoir .émis un
``close
'' sur votre connexion puis d'avoir
essayé d'actionner une autre commande alors que la connexion
était close.
Si vous avez un script, vous n'avez qu'à lancer la requête à nouveau pour que le client se reconnecte automatiquement.
Vous obtiendrez normalement les codes erreurs suivants dans ce cas (qui est indépendant du système d'exploitation) :
Code erreur | Description |
CR_SERVER_GONE_ERROR |
Le client ne peut envoyer de commandes au serveur. |
CR_SERVER_LOST |
Le client n'a pas obtenu d'erreur en contactant le serveur, mais n'a pas obtenu de réponse complète à la question posée. |
Par défaut, le serveur ferme la connexion après 8 heures si
rien ne se passe durant ce temps. Vous pouvez modifier la limite
de temps en changeant la variable
wait_timeout
lorsque vous lancez
mysqld
. See
Section 5.2.3, « Variables serveur système ».
Si vous avez un script, il suffit d'émettre une nouvelle requête pour que le client se reconnecte automatiquement.
Vous obtiendrez aussi cette erreur si quelqu'un à terminé le
processus avec kill #idprocessus#
.
Vous pouvez vérifier si le serveur MySQL est encore en marche
en exécutant mysqladmin version
et examinant
la date de mise en route. Si le problème est que
mysqld
a planté, vous devriez vous
concentrer sur la résolution du problème. Vous devez dans ce
cas commencer par vérifier si emmètre la même requête fera
à nouveau planter MySQL. See Section A.4.2, « Que faire si MySQL plante constamment ? ».
Vous pouvez aussi obtenir ces erreurs si vous envoyez une
requête incorrecte ou trop grande au serveur. Si
mysqld
re¸oit un paquet trop large ou mal
ordonné, il suppose que quelque chose s'est mal passé au
niveau du client et ferme la connexion. Si vous avez besoin de
grande requêtes (par exemple, si vous travaillez avec de
grandes colonnes BLOB
) vous pouvez augmenter
la taille limite des requêtes en démarrant
mysqld
avec l'option -O
max_allowed_packet=#
(1 Mo par défaut). Le surplus de
mémoire est alloué à la demande, ce qui fait que
mysqld
n'utilisera de la mémoire que lorsque
vous emmétrez une grande requête ou qu'il aura à retourner de
grandes réponses ! Plus d'informations sur la configuration de
la taille des paquets sont disponibles dans la section
Section A.2.9, « Erreur Packet too large
».
Si vous voulez rapporter un bogue concernant ce problème, merci d'inclure les informations suivantes :
MySQL a-t-il planté ? (Vous pouvez le savoir en regardant
le fichier hostname.err
. See
Section A.4.2, « Que faire si MySQL plante constamment ? ».
Si une requête spécifique fait planter
mysqld
et que les tables concernées ont
bien été vérifiées avec CHECK TABLE
avant l'exécution, pouvez-vous faire une batterie de
tests ? See Section D.1.6, « Faire une batterie de tests lorsque vous faites face à un problème de
table corrompue ».
Quelle est la valeur de la variable
wait_timeout
dans le serveur MySQL ?
mysqladmin variables
vous donnera une
réponse
Avez-vous essayé de démarrer mysqld
avec --log
et vérifié si la requête
apparaît bien dans le log ?
See Section 1.4.1.2, « Poser des questions ou rapporter un bogue ».
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.