J'obtiens cette erreur lorsque j'essaye de trouver un gros fichier SQL (une grosse 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 restaurer la table / base de données, ainsi que de redémarrer MySQL. Aucune de ces choses ne résout le problème.
Voici ma taille maximale de paquet:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
Voici la taille du fichier:
$ ls -s file.sql
79512 file.sql
Quand j'essaye 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
Réponses:
L'ajout de cette ligne dans un
my.cnf
fichier résout mon problème.Ceci est utile lorsque les colonnes ont de grandes valeurs, ce qui provoque des problèmes, vous pouvez trouver l'explication ici .
la source
set global max_allowed_packet=64*1024*1024;
- ne nécessite pas de redémarrage MySQL égalementsudo service mysql restart
pour que les modifications du fichier my.cnf prennent effet.Vous pouvez augmenter le nombre maximal de paquets autorisés
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
la source
La mise à jour globale et les paramètres my.cnf n'ont pas fonctionné pour moi pour une raison quelconque. Passer la
max_allowed_packet
valeur directement au client a fonctionné ici:la source
--max_allowed_packet
seul effet sur le client. Pensez également à modifier le serveur mysql (mysqld) en éditantmax_allowed_packet
le/etc/my.cnf
fichier et en redémarrant votre serveur mysql.En général, l'erreur:
signifie que le client n'a pas pu envoyer de question au serveur .
mysql
importerDans votre cas spécifique lors de l'importation du fichier de base de données via
mysql
, cela signifie très probablement que certaines des requêtes dans le fichier SQL sont trop volumineuses pour être importées et qu'elles n'ont pas pu être exécutées sur le serveur, donc le client échoue lors de la première erreur survenue.Vous avez donc les possibilités suivantes:
Ajoutez l'option force (
-f
) pourmysql
continuer et exécuter le reste des requêtes.Cela est utile si la base de données contient de grandes requêtes liées au cache qui ne sont pas pertinentes de toute façon.
Augmentez
max_allowed_packet
etwait_timeout
dans la configuration de votre serveur (par exemple~/.my.cnf
).Vider la base de données à l'aide de l'
--skip-extended-insert
option pour décomposer les grandes requêtes. Importez-le ensuite à nouveau.Essayez d'appliquer l'
--max-allowed-packet
option pourmysql
.Raisons courantes
En général, cette erreur peut signifier plusieurs choses, telles que:
une requête au serveur est incorrecte ou trop volumineuse,
Solution: augmenter la
max_allowed_packet
variable .Assurez-vous que la variable est sous la
[mysqld]
section, non[mysql]
.N'ayez pas peur d'utiliser de grands nombres pour les tests (comme
1G
).N'oubliez pas de redémarrer le serveur MySQL / MariaDB.
Vérifiez que la valeur a été correctement définie par:
Vous avez obtenu un délai d'expiration de la connexion TCP / IP côté client.
Solution: augmenter la
wait_timeout
variable .Vous avez tenté d'exécuter une requête après la fermeture de la connexion au serveur.
Solution: une erreur logique dans l'application doit être corrigée.
Les recherches de nom d'hôte ont échoué (par exemple, problème de serveur DNS) ou le serveur a été démarré avec l'
--skip-networking
option.Une autre possibilité est que votre pare-feu bloque le port MySQL (par exemple 3306 par défaut).
Le thread en cours d'exécution a été tué, essayez à nouveau.
Vous avez rencontré un bogue où le serveur est mort lors de l'exécution de la requête.
Un client s'exécutant sur un hôte différent n'a pas les privilèges nécessaires pour se connecter.
Et bien d'autres, alors apprenez-en plus sur: B.5.2.9 Le serveur MySQL est parti .
Débogage
Voici quelques idées de débogage de niveau expert:
Vérifiez les journaux, par exemple
Testez votre connexion via
mysql
,telnet
ou les fonctions ping (par exemplemysql_ping
en PHP).Utilisez
tcpdump
pour renifler la communication MySQL (ne fonctionnera pas pour la connexion socket), par exemple:Sous Linux, utilisez
strace
. Sur BSD / Mac, utilisezdtrace
/dtruss
, par exempleVoir: Premiers pas avec DTracing MySQL
Apprenez-en plus sur le débogage du serveur ou client MySQL sur: 26.5 Débogage et portage de MySQL .
Pour référence, vérifiez le code source dans le
sql-common/client.c
fichier responsable du lancement de l'CR_SERVER_GONE_ERROR
erreur pour la commande client.la source
Juste au cas où, pour vérifier les variables que vous pouvez utiliser
Cela affichera les variables actuelles, dans ce cas max_allowed_packet, et comme quelqu'un l'a dit dans une autre réponse, vous pouvez le définir temporairement avec
Dans mon cas, le fichier cnf n'a pas été pris en compte et je ne sais pas pourquoi, donc le code SET GLOBAL a vraiment aidé.
la source
J'ai résolu l'erreur
ERROR 2006 (HY000) at line 97: MySQL server has gone away
et réussi à migrer un fichier sql> 5 Go en effectuant ces deux étapes dans l'ordre:Créé /etc/my.cnf comme d'autres l'ont recommandé, avec le contenu suivant:
Ajout des drapeaux
--force --wait --reconnect
à la commande (iemysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect
).Remarque importante: Il était nécessaire d'effectuer les deux étapes, car si je ne prenais pas la peine d'apporter les modifications au fichier /etc/my.cnf ainsi que d'ajouter ces indicateurs, certaines tables manquaient après l'importation.
Système utilisé: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 pour osx10.8 (i386)
la source
my.cnf
, vous devez redémarrer votre service mysql.J'ai eu le même problème mais changer max_allowed_packet dans le fichier my.ini / my.cnf sous [mysqld] a fait l'affaire.
ajouter une ligne
redémarrez maintenant le service MySQL une fois que vous avez terminé.
la source
Vous pouvez également vous connecter à la base de données en tant que root (ou privilège SUPER) et faire
ne nécessite pas de redémarrage MySQL également. Notez que vous devez corriger votre
my.cnf
fichier comme indiqué dans d'autres solutions:Et confirmez la modification après avoir redémarré MySQL:
Vous pouvez également utiliser la ligne de commande, mais cela peut nécessiter la mise à jour des scripts de démarrage / d'arrêt qui peuvent ne pas survivre aux mises à jour et aux correctifs du système.
Comme demandé, j'ajoute ma propre réponse ici. Heureux de voir que cela fonctionne!
la source
La solution augmente les valeurs données par le
wait_timeout
et lesconnect_timeout
paramètres dans votre fichier d'options, sous l'[mysqld]
étiquette.J'ai dû récupérer une sauvegarde mysql de 400 Mo et cela a fonctionné pour moi (les valeurs que j'ai utilisées ci-dessous sont un peu exagérées, mais vous obtenez le point):
la source
Deux choses pourraient se produire ici;
INSERT
fonctionne depuis longtemps 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 consiste à exécuter votre fichier de commandes à partir de la ligne de commande et à sélectionner la base de données dans les arguments, comme ceci;php
ou dans une autre langue. Après chaque instruction longue, vous pouvez fermer et rouvrir la connexion, en vous assurant que vous êtes connecté au début de chaque requête.la source
source
commandeSi vous êtes sur Mac et avez installé mysql via brew comme moi, ce qui suit a fonctionné.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
Source: Pour les installations homebrew mysql, où est my.cnf?
ajouter
max_allowed_packet=1073741824
à/usr/local/etc/my.cnf
mysql.server restart
la source
J'ai rencontré cette erreur lorsque j'utilise Mysql Cluster, je ne sais pas si cette question provient d'une utilisation de cluster ou non. Comme l'erreur est exactement la même, donnez ma solution ici. Obtention de cette erreur car les nœuds de données se bloquent soudainement. Mais lorsque les nœuds se bloquent, vous pouvez toujours obtenir le résultat correct en utilisant cmd:
Et le mysqld fonctionne également correctement. Donc, au début, je ne peux pas comprendre ce qui ne va pas. Et environ 5 minutes plus tard, le résultat ndb_mgm montre qu'aucun nœud de données ne fonctionne. Ensuite, je me rends compte du problème. Alors, essayez de redémarrer tous les nœuds de données, puis le serveur mysql est de retour et tout est OK.
Mais une chose est bizarre pour moi, après avoir perdu le serveur mysql pour certaines requêtes, lorsque j'utilise cmd like
show tables
, je peux toujours obtenir les informations de retour comme33 rows in set (5.57 sec)
, mais aucune information de table n'est affichée.la source
Pour amazon RDS (c'est mon cas), vous pouvez changer la
max_allowed_packet
valeur du paramètre en n'importe quelle valeur numérique en octets qui a du sens pour les plus grandes données dans n'importe quel insert que vous pourriez avoir (par exemple: si vous avez des valeurs de blob de 50 Mo dans votre insert, définissez lemax_allowed_packet
à 64M = 67108864), dans un nouveau ou existantparameter-group
. Ensuite, appliquez ce groupe de paramètres à votre instance MySQL (peut nécessiter un redémarrage de l'instance).la source
max_allowed_packet parameter
et définissez-le à la taille appropriée (ou si vous avez de très gros blobs, définissez-le simplement sur la valeur maximale 1073741824 ) cela devrait fonctionner.S'il se reconnecte et obtient l'ID de connexion 2, le serveur vient presque définitivement de planter.
Contactez l'administrateur du serveur et demandez-lui de diagnostiquer le problème. Aucun SQL non malveillant ne devrait planter le serveur, et la sortie de mysqldump ne devrait certainement pas.
Il est probable que l'administrateur du serveur ait commis de grosses erreurs opérationnelles telles que l'attribution de tailles de mémoire tampon supérieures aux limites de l'espace d'adressage de l'architecture ou supérieures à la capacité de mémoire virtuelle. Le journal des erreurs MySQL contiendra probablement des informations pertinentes; ils surveilleront cela s'ils sont compétents de toute façon.
la source
C'est plus un problème rare mais je l'ai vu si quelqu'un a copié tout le répertoire / var / lib / mysql comme moyen de migrer leur base de données vers un autre serveur. La raison pour laquelle cela ne fonctionne pas est que la base de données était en cours d'exécution et utilisait des fichiers journaux. Cela ne fonctionne pas parfois s'il y a des journaux dans / var / log / mysql. La solution consiste également à copier les fichiers / var / log / mysql.
la source
Pour les utilisateurs de Drupal 8 à la recherche d'une solution pour l'échec de l'importation de base de données:
À la fin du fichier de vidage sql, il peut y avoir des commandes insérant des données dans la table "webprofiler". C'est, je suppose, un fichier journal de débogage et ce n'est pas vraiment important pour que le site fonctionne, donc tout cela peut être supprimé. J'ai supprimé toutes ces insertions, y compris LOCK TABLES et UNLOCK TABLES (et tout le reste). C'est tout en bas du fichier sql. Le problème est décrit ici:
https://www.drupal.org/project/devel/issues/2723437
Mais il n'y a pas d'autre solution que de tronquer ce tableau.
BTW J'ai essayé toutes les solutions des réponses ci-dessus et rien d'autre n'a aidé.
la source
J'ai essayé toutes les solutions ci-dessus, toutes ont échoué.
J'ai fini par utiliser
-h 127.0.0.1
au lieu d'utiliser par défautvar/run/mysqld/mysqld.sock
.la source
Ce message d'erreur se produit également lorsque vous avez créé le SCHEMA avec une COLLATION différente de celle qui est utilisée dans le vidage. Donc, si le vidage contient
vous devez également en tenir compte dans le classement SCHEMA:
J'utilisais utf8mb4_general_ci dans le schéma, car mon script provenait d'une nouvelle installation V8, le chargement d'une base de données sur l'ancien 5.7 s'est écrasé et m'a rendu presque fou.
Donc, peut-être que cela vous aide à économiser des heures frustrantes ... :-)
(MacOS 10.3, mysql 5.7)
la source
si aucune de ces réponses ne vous résout le problème, je l'ai résolu en supprimant les tables et en les recréant automatiquement de cette manière:
utilisez ensuite cette sauvegarde avec votre base de données et elle supprimera et recréera les tables dont vous avez besoin.
Ensuite, vous sauvegardez uniquement les données, et faites de même, et cela fonctionnera.
la source
Que diriez-vous d'utiliser le client mysql comme ceci:
la source