346 votes

ERREUR 2006 (HY000) : Le serveur MySQL a disparu

J'obtiens cette erreur lorsque j'essaie d'extraire un fichier SQL volumineux (un grand INSERT requête).

mysql>  source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ***

Rien dans le tableau n'est mis à jour. J'ai essayé de supprimer et de désupprimer la table/base de données, ainsi que de redémarrer MySQL. Aucune de ces choses ne résout le problème.

Voici la taille maximale de mon paquet :

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+

Voici la taille du fichier :

$ ls -s file.sql 
79512 file.sql

Quand j'essaie l'autre méthode...

$ ./mysql -u root -p my_db < file.sql
Enter password: 
ERROR 2006 (HY000) at line 1: MySQL server has gone away

2 votes

Quelle est la taille de ce fichier ? Est-il possible qu'il dépasse le paramètre max_allowed_packet ?

1 votes

Ok, ce n'est pas ça. Essayez d'extraire des requêtes individuelles du fichier et de les exécuter vous-même dans le moniteur. Quelque chose là-dedans provoque un crash/déconnexion.

0 votes

Les requêtes que je tire au hasard du fichier fonctionnent bien. J'ai généré le SQL de manière programmatique, et j'ai correctement échappé à tout. Je ne suis donc pas sûr de ce qui pourrait causer une erreur, s'il y en a une.

630voto

Kurt Zhong Points 1223
max_allowed_packet=64M

En ajoutant cette ligne dans my.cnf résout mon problème.

Ceci est utile lorsque les colonnes ont de grandes valeurs, ce qui cause les problèmes, vous pouvez trouver l'explication aquí .

Sous Windows, ce fichier est situé à l'adresse suivante " C:\ProgramData\MySQL\MySQL Serveur 5.6"

Sous Linux (Ubuntu) : /etc/mysql

3 votes

Cette solution a résolu le problème pour moi ; rien ne pouvait être fait par le biais de la configuration/options côté client uniquement, et je n'étais pas prêt à me lancer dans une solution programmatique via PHP ou autre.

0 votes

Cette solution a fonctionné pour moi sur un système Fedora 18 Dev. Après cela, je peux également insérer le fichier via chive. Une base de données de 10 Mo.

0 votes

Cela a résolu mon problème. Cependant, si quelqu'un n'a pas de my.cnf comme moi sous OS X, il faut en copier un depuis /usr/local/mysql/support-files/ vers /etc/my.cnf et redémarrer MySQL.

179voto

Nanhe Kumar Points 2207

Vous pouvez augmenter le nombre maximum de paquets autorisés

SET GLOBAL max_allowed_packet=1073741824;

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

3 votes

Cela a fonctionné pour moi, alors que la réponse acceptée n'a pas fonctionné. Je suppose que la valeur plus élevée de cette réponse est la Racine de la solution pour moi.

0 votes

J'ai défini max_allowed_packet=1024M dans my.cnf

1 votes

Cela fait le serveur. Vous devez également le faire dans le client, comme "mysql --max_allowed_packet=1073741824".

70voto

Mario Peshev Points 270

La mise à jour globale et les paramètres my.cnf n'ont pas fonctionné pour moi pour une raison quelconque. En passant le max_allowed_packet directement au client a travaillé ici :

mysql -h <hostname> -u username -p --max_allowed_packet=1073741824 <databasename> < db.sql

4 votes

Selon le site Web de MySQL, il faut utiliser à la fois la réponse marquée et celle-ci.

2 votes

N'oubliez pas de recharger les fichiers de configuration ou de redémarrer le serveur après avoir modifié ces paramètres.

4 votes

Gardez à l'esprit que l'utilisation du --max_allowed_packet n'affecte que le client. Pensez à modifier également le serveur mysql (mysqld) en éditant max_allowed_packet dans le /etc/my.cnf et redémarrer votre serveur mysql.

10voto

Sathish D Points 1719

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

ajouter une ligne

max_allowed_packet=500M

Redémarrez maintenant le service MySQL une fois que vous avez terminé.

1 votes

@babonk oui mais cette réponse est plus utile parce qu'elle dit sous quelle section elle doit être placée.

6voto

Chris Henry Points 5191

Il y a plusieurs choses qui peuvent se passer ici ;

  • Su INSERT est long, et le client se déconnecte. Lorsqu'il se reconnecte, il ne sélectionne pas de base de données, d'où l'erreur. Une option ici est d'exécuter votre fichier batch à partir de la ligne de commande, et de sélectionner la base de données dans les arguments, comme ceci ;

$ mysql db_name < source.sql

  • Une autre solution consiste à exécuter votre commande via php ou une autre langue. Après chaque requête longue durée, vous pouvez fermer et rouvrir la connexion, en vous assurant que vous êtes connecté au début de chaque requête.

0 votes

Une autre chose qui vaut la peine d'être mentionnée est que j'obtiens l'erreur presque immédiatement après le source commande

0 votes

Si vous obtenez l'erreur immédiatement après la commande source, il est probable que MySQL n'aime pas quelque chose dans la requête. Avez-vous vérifié le journal général ?

0 votes

Je dois trouver comment vérifier le journal général Je suis sur MAMP et je ne suis pas sûr qu'il l'écrive par défaut.

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