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?
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.
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.
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é.
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;
Dans MAMP (version non-pro), j'ai ajouté
--max_allowed_packet=268435456
à ...\MAMP\bin\startMysql.sh
Crédits et plus de détails ici
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
.
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
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.
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.
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
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
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
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.
Pour Vagrant Box, assurez-vous d’allouer suffisamment de mémoire à la boîte.
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
end
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.
J'ai trouvé la solution à "# 2006 - Le serveur MySQL est parti" à cette erreur . La solution est juste de vérifier deux fichiers
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:
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.
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
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.
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.
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
Il y a plusieurs causes à cette erreur.
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
free -h
CONN_MAX_AGE
(voir docs )SHOW VARIABLES LIKE '%time%';
mysqladmin variables
log_warnings = 4
log_error_verbosity = 3
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:
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;
Pour les utilisateurs de XAMPP, il existe 2 max_allowed_packet parameters dans C:\xampp\mysql\bin\my.ini.
Cette erreur se produit essentiellement pour deux raisons.
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.
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é :)
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.
Maintenant, cliquez sur le fichier my.ini et il s'ouvrira dans l'éditeur. Mettez à jour max_allowed_packet à la taille requise.
Puis redémarrez le service mysql. Cliquez sur Arrêter sur le service Mysql. Cliquez de nouveau sur Démarrer. Attends quelques minutes.
Ensuite, essayez de réexécuter votre requête Mysql. J'espère que ça va marcher.