web-dev-qa-db-fra.com

"MySQL Server est parti" lorsque vous essayez d'importer un gros fichier de vidage

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 couru:

SOURCE c:/dump.sql

Mais cela semble avoir projeté des problèmes de type de caractère (spécifiquement avec des citations intelligentes et une autre ponctuation non standard).

Cela m'a suggéré que je courais:

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

Quand j'essaie cela, je reçois l'erreur

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

Un peu de googling a suggéré que c'était à faire avec le commutateur max_allowed_packet, mais j'ai essayé cela et cela n'a pas fonctionné. Quelqu'un a-t-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 qui seraient utiles aussi.

11
Jeremy French

Mon premier instinct Après avoir lu le message d'erreur dans le titre de la question consistait à suggérer d'augmenter max_allowed_packet. Vous avez mentionné que vous avez essayé "qui commuter" et cela n'a pas fonctionné. Pouvez-vous confirmer que vous avez correctement modifié le fichier de configuration du serveur? Votre phrase permet de sonner comme vous avez essayé d'utiliser cela comme un commutateur de ligne de commande sur la ligne de commande client MySQL.exe, qui ne causerait pas de modifier le serveur.

Donc, en bref, ce que vous devriez essayer de faire est de localiser et de modifier le fichier my.cnf que votre serveur utilise actuellement. Dans le [mysqld] section modifier les paramètres max_allowed_packet à 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 ridicyement grande) à titre d'exemple. Puisque votre requête semble être Enourmous, vous devriez essayer cette valeur (ou peut-être même 64 m si vous avez suffisamment de RAM) pour voir si cela fonctionne.

Une autre option est de laisser le serveur tel quel et de 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 grand Dans le manuel MySQL.

23

Sur MySQL 5.7.24, il était dû à la vieille 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 plus.

sql_mode=TRADITIONAL

Aussi Il y a deux paramètres max_owed_packet dans /etc/my.cnf, l'autre est pour MySqldump. Veuillez prendre note de la même chose.

max_allowed_packet = <1g>

Mon installation est sur Centos7.

1
Krishna Pandey

Que dit le journal MySQL?

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

0
Dave Cheney