«Le serveur MySQL est parti» lors de la tentative d'importation d'un gros fichier de vidage


11

J'essaie d'importer un fichier de vidage MySQL.

Le fichier a été créé sur un serveur Linux, j'essaie d'importer sur Windows

Je me suis connecté à la ligne de commande et j'ai exécuté:

SOURCE c:/dump.sql

Mais cela semble avoir soulevé certains problèmes de jeu de caractères (en particulier avec les citations intelligentes et autres signes de ponctuation non standard).

Il m'a été suggéré de courir:

mysql -u username -d dbase < c:\dump.sql

Quand j'essaye ceci j'obtiens l'erreur

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

Un peu de recherche sur Google a suggéré que cela était dû au commutateur max_allowed_packet, mais j'ai essayé cela et cela n'a pas fonctionné. Quelqu'un at-il une idée de ce que cela pourrait être?

Si quelqu'un a une suggestion sur le problème du jeu de caractères, cela pourrait également être utile.


Tous les commentaires? [15 caractères requis pour commenter]
Mihai Limbăşan

Réponses:


23

Mon premier instinct après avoir lu le message d'erreur dans le titre de la question a été de suggérer d'augmenter max_allowed_packet. Vous avez mentionné que vous aviez essayé "ce commutateur" et que cela n'avait pas fonctionné. Pouvez-vous confirmer que vous avez correctement modifié le fichier de configuration du serveur? Votre phrasé donne l'impression que vous avez essayé de l'utiliser comme un commutateur de ligne de commande sur la ligne de commande du client mysql.exe, ce qui n'entraînerait pas de modification du comportement du serveur.

Donc, en bref, ce que vous devez essayer de faire est de localiser et de modifier le fichier my.cnf que votre serveur utilise actuellement. Dans la [mysqld]section, modifiez les paramètres max_allowed_packet en quelque chose comme

[mysqld]
max_allowed_packet=32M

N'oubliez pas de redémarrer le serveur après avoir modifié la configuration.

J'ai utilisé 32M (une valeur ridiculement grande) comme exemple. Étant donné que votre requête semble énorme, vous devriez essayer cette valeur (ou peut-être même 64 Mo si vous avez suffisamment de RAM) pour voir si cela fonctionne.

Une autre option consiste à laisser le serveur tel quel et à modifier le comportement du client utilisé pour générer le vidage SQL. Dites-lui de limiter la taille des requêtes individuelles à moins de 1 Mo - cela devrait également faire l'affaire.

Pour plus de détails, voir B.1.2.10. Paquet trop volumineux dans le manuel MySQL.


1
Oui, j'essayais juste le commutateur de ligne de commande. La raison pour laquelle je pensais que cela avait un effet était qu'il donnait une erreur de paquet autorisé trop petite lorsque je le définissais sur quelque chose de plus petit. J'essaierai votre suggestion lundi. Merci
Jeremy French

Vous êtes les bienvenus - je suis presque certain que cela fonctionnera. Malheureusement, comme avec beaucoup (d'accord, la plupart) d'autres logiciels écrits au cours des 50 dernières années, les messages d'erreur de MySQL ont tendance à être nul et trompeurs si vous n'êtes pas déjà familier avec la façon dont fonctionne l'esprit du développeur :).
Mihai Limbăşan

Heureux d'entendre cela - amusez-vous.
Mihai Limbăşan

Très très génial. J'ai eu ce même problème, je suis venu ici pour poser la question et bam! résolu. @Mihai - tout ce que vous êtes payé; ce n'est pas suffisant :)
Steven Evers

Cette solution nous a aidés lorsque nous avons eu cette erreur après avoir déplacé notre MySQL de l'hôte local vers un serveur distant. Merci beaucoup!
Lea Cohen

1

Sur MySQL 5.7.24, c'était dû à une ancienne configuration de MySQL 5.6

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

L'option ci-dessous est obligatoire si la version SQL est la même 5.7.5 ou supérieure.

sql_mode=TRADITIONAL

Il y a aussi deux paramètres max_allowed_packet dans /etc/my.cnf, l'autre est pour mysqldump. Veuillez en prendre note.

max_allowed_packet = <1G>

Mon installation est sur CentOS7.


0

Êtes-vous en mesure d'accéder à l'instance MySQL sur le serveur Windows à partir de la boîte Linux?

Si c'est le cas, pouvez-vous exécuter la commande sur la boîte Linux, avec le commutateur -h pour vous connecter au serveur sur la boîte Windows?

mysql -u username -d dbase -h <windows host> < dump.sql

Cela pourrait résoudre vos problèmes de jeu de caractères , car vous utilisez le client Linux sur la boîte d'origine pour effectuer l'importation. (juste une supposition)


0

Que dit le journal MySQL?

Parfois, cette erreur est signalée sur le client s'il y a une erreur non corrigible sur le serveur. Cela peut être un indicateur de corruption sur disque des tables de base de données.


-1

Votre compte avait-il un mot de passe? Vous devrez peut-être ajouter le commutateur -p:

mysql -u username -p -d dbase < c:\dump.sql

Oh - probablement pas, car il semble avoir échoué à l'importation.
Brent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.