web-dev-qa-db-fra.com

Erreur MySQL 2006: le serveur mysql est parti

J'exécute un serveur dans mon bureau pour traiter certains fichiers et signaler les résultats à un serveur MySQL distant.

Le traitement des fichiers prend un certain temps et le processus s'interrompt avec l'erreur suivante: 

2006, MySQL server has gone away

J'ai entendu parler du paramètre MySQL, wait_timeout , mais dois-je le modifier sur le serveur de mon bureau ou sur le serveur MySQL distant?

190
floatleft

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

Voir PHP: mysqli_ping pour plus d'informations à ce sujet.

25

Je l'ai rencontré plusieurs fois et j'ai normalement trouvé que la réponse était un paramètre par défaut très bas de max_allowed_packet

Le relancer dans /etc/my.cnf (sous [mysqld]) à 8 ou 16M le résout généralement. (La valeur par défaut dans MySql 5.7 est 4194304, ce qui correspond à 4 Mo.)

[mysqld]
max_allowed_packet=16M

Remarque: Ceci peut être défini sur votre serveur pendant son exécution. 

Utilisez set global max_allowed_packet=104857600. Cela le fixe à 100 Mo.

311
George

J'ai eu le même problème, mais changer max_allowed_packet dans le fichier my.ini/my.cnf sous [mysqld] a rendu l'affaire.

ajouter une ligne 

max_allowed_packet = 500M

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

36
Sathish D

J'ai utilisé la commande suivante en ligne de commande MySQL pour restaurer une base de données MySQL d'une taille supérieure à 7 Go, et cela fonctionne.

set global max_allowed_packet=268435456;
27
Geshan Ravindu

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

--max_allowed_packet=268435456

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

Crédits et plus de détails ici

15
uwe

Erreur: 2006 ( CR_SERVER_GONE_ERROR )

Message: le serveur MySQL est parti

Généralement, vous pouvez réessayer de vous connecter, puis relancez la requête pour résoudre ce problème - essayez trois ou quatre fois avant d'abandonner complètement.

Je suppose que vous utilisez PDO. Si tel est le cas, vous interceptez l'exception PDO, incrémentez un compteur, puis réessayez si le compteur est inférieur à un seuil.

Si une requête provoque 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 le temps maximal que la requête pourrait prendre.

Plus d'informations sur la façon de traiter les problèmes de connexion Mysql.

EDIT: Deux autres paramètres que vous pouvez également utiliser sont net_write_timeout et net_read_timeout.

13
Yzmir Ramirez

Cette erreur est due à l'expiration de wait_timeout.

Allez simplement sur le serveur mysql vérifiez son wait_timeout: 

mysql> AFFICHER LES VARIABLES LIKE 'wait_timeout'

mysql> set global wait_timeout = 600 # 10 minutes ou le temps d'attente maximal sur vous avez besoin

http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html

8
Saurabh Goyal

Sous Windows, ceux qui utilisent xampp doivent utiliser ce chemin xampp/mysql/bin/my.ini et modifier max_allowed_packet (section [mysqld]) à la taille de votre choix ..__

max_allowed_packet=8M

Encore une fois sur php.ini (xampp/php/php.ini), modifiez upload_max_filesize la taille de choix . E.g

upload_max_filesize=8M

M'a donné un mal de tête pendant quelque temps jusqu'à ce que je découvre cela. J'espère que ça aide.

7
Kenneth mwangi

Je recevais cette même erreur sur mon serveur DigitalOcean Ubuntu.

J'ai essayé de changer les paramètres max_allowed_packet et wait_timeout mais aucun d'entre eux ne l'a corrigé.

Il s'avère que mon serveur était à court de RAM. J'ai ajouté un fichier d'échange 1GB et cela a résolu mon problème.

Vérifiez votre mémoire avec free -h pour voir si c'est ce qui la cause.

7
Pikamander2

C'était RAM problème pour moi.

J'avais le même problème, même sur un serveur avec 12 cœurs de processeur et 32 ​​Go de RAM. J'ai cherché plus et essayé de libérer de la RAM. Voici la commande que j'ai utilisée sur Ubuntu 14.04 pour libérer de la RAM:

sync && echo 3 | Sudo tee /proc/sys/vm/drop_caches

Et tout a été réparé. Je l'ai mis sous cron pour courir toutes les heures.

crontab -e

0 * * * * bash /root/ram.sh;

Et vous pouvez utiliser cette commande pour vérifier combien de mémoire libre RAM est disponible:

free -h

Et vous obtiendrez quelque chose comme ceci:

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G
4
Rehmat

Cela indique généralement serveur MySQL problèmes de connectivité ou délais. Peut généralement être résolu en changeant wait_timeout et max_allowed_packet in my.cnf ou similaire.

Je suggérerais ces valeurs:

wait_timeout = 28800

max_allowed_packet = 8M

3
Memo

Dans mon cas, la valeur de la variable open_files_limit était faible, ce qui bloquait l'accès de mysqld aux fichiers de données.

Je l'ai vérifié avec:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

Après avoir changé la variable en grande valeur, notre serveur était à nouveau en vie:

[mysqld]
open_files_limit = 100000
3
Fedir RYKHTIK

Si vous utilisez WAMPSERVER 64 bits, veuillez rechercher plusieurs occurrences de max_allowed_packet car WAMP utilise la valeur définie sous [wampmysqld64] et non la valeur définie sous [mysqldump], ce qui était pour moi le problème, je mettais à jour le le mauvais. Définissez ceci à quelque chose comme max_allowed_packet = 64M. 

Espérons que cela aide les autres utilisateurs de Wampserver.

3
user2663630

Pour Vagrant Box, assurez-vous d’allouer suffisamment de mémoire à la boîte.

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end
3
Shadowbob

Le scénario peu probable est que vous ayez un pare-feu entre le client et le serveur qui force la réinitialisation de TCP dans la connexion. 

J'ai eu ce problème et j'ai constaté que notre pare-feu F5 d'entreprise était configuré pour mettre fin aux sessions inactives inactives pendant plus de 5 minutes.

Encore une fois, c'est le scénario improbable.

3
Ahmed

J'ai trouvé la solution à "# 2006 - Le serveur MySQL est parti" à cette erreur . La solution est juste de vérifier deux fichiers

  1. config.inc.php
  2. config.sample.inc.php

Le chemin de ces fichiers dans Windows est 

C:\wamp64\apps\phpmyadmin4.6.4

Dans ces deux fichiers, la valeur de ceci:

$cfg['Servers'][$i]['Host']must be 'localhost' .

Dans mon cas c'était:

$cfg['Servers'][$i]['Host'] = '127.0.0.1';

changez le en:

"$cfg['Servers'][$i]['Host']" = 'localhost';

Assurez-vous dans les deux:

  1. config.inc.php
  2. les fichiers config.sample.inc.php doivent être "localhost".

Et dernier set:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

Puis redémarrez Wampserver.


Pour changer le nom d'utilisateur et le mot de passe de phpmyadmin

Vous pouvez directement changer le nom d'utilisateur et le mot de passe de phpmyadmin via le fichier config.inc.php

Ces deux lignes

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

Vous pouvez donner ici un nouveau nom d'utilisateur et un nouveau mot de passe . Après les modifications, enregistrez le fichier et redémarrez le serveur WAMP.

2
um life

décommentez la ligne ci-dessous dans votre my.ini/my.cnf, cela divisera votre fichier volumineux en une portion plus petite

# binary logging format - mixed recommended
# binlog_format=mixed

À 

# binary logging format - mixed recommended
binlog_format=mixed
2
Nico

J'ai reçu un message d'erreur 2006 dans différents logiciels clients MySQL sur mon bureau Ubuntu. Il s'est avéré que la version de mon pilote JDBC était trop ancienne. 

1
Bo Guo

C'est toujours une bonne idée de vérifier les journaux du serveur Mysql, pour la raison pour laquelle il est parti.

Il va vous dire.

1
Alex

Cela pourrait être un problème de votre taille de fichier .sql.

Si vous utilisez xampp. Allez dans le panneau de configuration de xampp -> Cliquez sur MySql config -> Open my.ini.

Augmenter la taille du paquet.

max_allowed_packet = 2M -> 10M
1
Nikunj Dhimar

Il y a plusieurs causes à cette erreur.

Relatif MySQL/MariaDB:

  • wait_timeout - Temps en secondes pendant lequel le serveur attend qu'une connexion devienne active avant de la fermer.
  • interactive_timeout - Durée en secondes pendant laquelle le serveur attend une connexion interactive.
  • max_allowed_packet - Taille maximale en octets d'un paquet ou d'une chaîne générée/intermédiaire. Définissez la taille du BLOB le plus grand, par multiples de 1024.

Exemple de my.cnf:

[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M

Serveur lié:

  • Votre serveur dispose de toute la mémoire - vérifiez les informations concernant RAM avec free -h

Cadre associé:

  • Vérifiez les paramètres de votre framework. Django, par exemple, utilise CONN_MAX_AGE (voir docs )

Comment le déboguer:

  • Vérifiez les valeurs des variables MySQL/MariaDB .
    • avec sql: SHOW VARIABLES LIKE '%time%';
    • ligne de commande: mysqladmin variables
  • Activez la verbosité pour les erreurs:
    • MariaDB: log_warnings = 4
    • MySQL: log_error_verbosity = 3
  • Vérifiez docs pour plus d’informations sur l’erreur
0
jozo

MAMP 5.3, vous ne trouverez pas my.cnf et leur ajout ne fonctionne pas car ce max_allowed_packet est stocké dans des variables.

Une solution peut être:

  1. Allez à http: // localhost/phpmyadmin
  2. Aller sur l'onglet SQL
  3. Exécutez SHOW VARIABLES et vérifiez les valeurs, si elle est petite, exécutez-la avec de grandes valeurs
  4. Exécutez la requête suivante pour définir max_allowed_packet sur 7 Go:

    set global max_allowed_packet = 268435456;

Pour certains, vous devrez peut-être également augmenter les valeurs suivantes:

set global wait_timeout = 600;
set innodb_log_file_size =268435456;
0
Rupak Nepali

Pour les utilisateurs de XAMPP, il existe 2 max_allowed_packet parameters dans C:\xampp\mysql\bin\my.ini.

0
Subhash

Cette erreur se produit essentiellement pour deux raisons.

  1. Vous avez une RAM trop basse.
  2. La connexion à la base de données est fermée lorsque vous essayez de vous connecter.

Vous pouvez essayer ce code ci-dessous.

# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
    try:            
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()
    except (AttributeError, MySQLdb.OperationalError):
        self.__init__()
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()

Cela atténue l'erreur, quelle qu'en soit la raison, en particulier pour la deuxième raison.

Si cela est dû à un manque de RAM, vous devez soit augmenter l'efficacité de la connexion à la base de données à partir du code, de la configuration de la base de données, soit simplement augmenter la RAM.

0
Aminah Nuraini

Si vous utilisez un serveur xampp:

Allez dans xampp -> mysql -> bin -> my.ini

Modifier le paramètre ci-dessous:

max_allowed_packet = 500M

innodb_log_file_size = 128M

Cela m'a beaucoup aidé :)

0
Archana Kamath

Il existe un moyen plus simple d’utiliser XAMPP. Ouvrez le panneau de configuration de XAMPP et cliquez sur le bouton de configuration dans la section mysql.
 enter image description here 

Maintenant, cliquez sur le fichier my.ini et il s'ouvrira dans l'éditeur. Mettez à jour max_allowed_packet à la taille requise.

 enter image description here 

Puis redémarrez le service mysql. Cliquez sur Arrêter sur le service Mysql. Cliquez de nouveau sur Démarrer. Attends quelques minutes.  enter image description here  enter image description here 

Ensuite, essayez de réexécuter votre requête Mysql. J'espère que ça va marcher.

0
Hriju