331 votes

Erreur MySQL 2006 : le serveur mysql a disparu

J'utilise un serveur à mon bureau pour traiter certains fichiers et transmettre les résultats à un serveur MySQL distant.

Le traitement des fichiers prend un certain temps et le processus s'arrête à mi-chemin avec l'erreur suivante :

2006, MySQL server has gone away

J'ai entendu parler de la configuration de MySQL, délai d'attente Mais dois-je changer cela sur le serveur de mon bureau ou sur le serveur MySQL distant ?

2 votes

Cela dépend de ce serveur qui donne l'erreur

2 votes

19 votes

Pour les personnes qui arrivent ici depuis Google : Si vous changez le max_allowed_packet la taille ou wait_timeout Si la quantité ne résout pas le problème, vérifiez votre utilisation de la mémoire. Je recevais la même erreur et elle était causée par mon serveur qui manquait de mémoire. J'ai ajouté un fichier swap de 1 Go et cela a réglé le problème.

479voto

George Points 1016

J'ai rencontré ce problème un certain nombre de fois et j'ai généralement trouvé la solution en fixant un paramètre par défaut très faible de max_allowed_packet .

L'élever dans /etc/my.cnf (sous [mysqld] ) à 8 ou 16M règle généralement le problème. (La valeur par défaut dans MySql 5.7 est 4194304 qui est de 4MB).

[mysqld]
max_allowed_packet=16M

Note : Il suffit de créer la ligne si elle n'existe pas.

Remarque : Ce paramètre peut être défini sur votre serveur en cours d'exécution.

Utilice set global max_allowed_packet=104857600 . Ceci le fixe à 100MB.

30 votes

Notez que ce paramètre peut être défini sur votre serveur en cours d'exécution. Utilisez : "set global max_allowed_packet=104857600". NOTE : Ma valeur est de 100MB.

0 votes

C'était la solution à mes erreurs "mysql server has gone away" dont je savais qu'elles n'étaient pas en fait des délais d'attente.

37 votes

Pour les utilisateurs de xampp, le fichier my.cnf se trouve à l'adresse suivante : C:\xampp\mysql\bin\

64voto

Sathish D Points 1719

J'ai eu le même problème mais en changeant max_allowed_packet dans le my.ini/my.cnf fichier sous [mysqld] a fait le tour.

ajouter une ligne

max_allowed_packet=500M

maintenant restart the MySQL service une fois que vous avez terminé.

7 votes

L'autre type a écrit 16M, vous avez écrit 500M, quelle est la signification de ce paramètre ?

2 votes

@pal4life Il s'agit de la taille maximale autorisée pour les déclarations d'insertion. Que se passe-t-il si votre déclaration d'insertion est supérieure à 16M (si la déclaration est constituée de colonnes de type longblob ou autre) ? Pour être plus sûr, faites-la énorme, comme 500M, si vous insérez une grande quantité de données.

0 votes

Ça a marché pour moi, mais je ne sais pas pourquoi. La valeur par défaut était 1M mais lorsque je l'ai changée pour 100M, l'erreur a disparu. Le problème a commencé lorsque j'ai défini wait_timeout = 30 pour tenter de réduire le nombre de threads inactifs sur mon serveur.

36voto

Niet the Dark Absol Points 154811

Il peut être plus facile de vérifier si la connexion est établie et de la rétablir si nécessaire.

Voir PHP:mysqli_ping pour des informations à ce sujet.

0 votes

Bon point, si vous avez un processus qui est intermittent, il est préférable de libérer votre connexion afin de ne pas utiliser toutes les connexions. Reconstruire la connexion est généralement bon marché. +1

2 votes

En 2018 : mysqli_ping est déprécarisé

1 votes

@fb qu'est-ce qui est utilisé pour faire cela avec PDO ?

19voto

Yzmir Ramirez Points 1021

Erreur : 2006 ( CR_SERVER_GONE_ERROR )

Message : Le serveur MySQL a disparu

En général, vous pouvez réessayer de vous connecter puis de refaire la requête pour résoudre ce problème. Essayez 3 ou 4 fois avant d'abandonner complètement.

Je suppose que vous utilisez PDO. Si c'est le cas, vous devez attraper l'exception PDO, incrémenter un compteur et réessayer si le compteur est inférieur à un seuil.

Si vous avez une requête qui cause un délai d'attente, vous pouvez définir cette variable en exécutant :

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

Où 300 est le nombre de secondes que vous pensez être le temps maximum que la requête pourrait prendre.

Informations supplémentaires sur la manière de traiter les problèmes de connexion Mysql.

EDIT : Deux autres paramètres que vous pourriez vouloir utiliser sont les suivants net_write_timeout y net_read_timeout .

18voto

MotoTribe Points 485

Dans MAMP (version non-pro), j'ai ajouté

--max_allowed_packet=268435456

à ...\MAMP\bin\startMysql.sh

Crédits et plus de détails aquí

0 votes

Merci beaucoup pour cela !

0 votes

Travaux ! Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X