web-dev-qa-db-fra.com

erreur mysqldump 2013

J'ai une base de données installée, que je voudrais sauvegarder dans mysql. Le problème est que mysqldump échoue lors de l'exportation de la table 'maia_mail'

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

Il fonctionne pendant moins de 30 secondes et obtient une erreur comme ci-dessus.

La taille totale de la base de données est de 1,3 Go, la table maia_mail étant de 1,0 Go

Dans my.cnf J'ai ces ensembles:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

Veuillez conseiller ou donner des conseils sur la façon de vider la base de données?

18
garfink

Je pourrais facilement suggérer de modifier les paramètres InnoDB qui pourraient être un peu lourds juste pour faire fonctionner un mysqldump. Vous n'aimez peut-être pas ce que je propose, mais je pense que c'est votre meilleure (seule) option. Ça y est:

SUGGESTION # 1: Désactiver les insertions étendues

Le paramètre par défaut pour mysqldump inclurait le regroupement de centaines ou de milliers de lignes dans un seul INSERT. C'est ce qu'on appelle un INSERT étendu. Cela provoque un dépassement au-delà de max_allowed_packet .

J'ai répondu à un message le Sep 01, 2011 ( le serveur MySQL est parti en empêchant l'importation de gros vidages ) où j'ai discuté de la même chose pour importer un grand mysqldump. Je crois que la désactivation de INSERT étendu aiderait également à créer un mysqldump gênant.

mysqldump -u root --skip-extended-insert -p maia > maia.sql

Mauvaise nouvelle: ce que cela fait en créant une commande INSERT pour chaque ligne. Cela augmentera certainement le temps nécessaire pour effectuer le mysqldump. Par conséquent, il augmentera également avec le temps nécessaire pour recharger (probablement par un facteur de 10-100.

J'ai discuté skip-extended-insert avant

SUGGESTION # 2: vidage des données binaires sous forme hexadécimale (FACULTATIF)

Pour rendre les données binaires de mysqldump plus portables, vider ces données en hexadécimal

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

Mauvaise nouvelle: cela gonflera un peu plus le mysqldump

ESSAIE !!!

Note latérale: La taille maximale de max_allowed_packet est 1G

13
RolandoMySQLDBA

J'obtenais également la même erreur en essayant de vider la base de données de 12 Go. J'ai fait les changements suivants pour le faire fonctionner.

  1. paquet max_allowed_packet configuré à 1024M
  2. net_read_timeout configuré à 7200
  3. net_write_timeout configuré à 7200

Remarque: Je sais que les valeurs de délai d'attente sont beaucoup trop élevées (7200 secondes i 20h). Mais je l'ai fait intentionnellement juste pour exclure toute chance. Je suis en train de trouver une valeur de timeout optimale.

5
real gadha

Incluez simplement les éléments suivants dans votre fichier de configuration my.ini (Windows) ou my.cnf (Linux).

[mysqld]
max_allowed_packet=1024M 

[mysqldump]
max_allowed_packet=1024M 
net_read_timeout=3600 
net_write_timeout=3600
3
Jesus Uzcanga

Assurez-vous d'avoir suffisamment de mémoire pour effectuer un vidage. Veuillez continuer à vérifier la mémoire pendant la sauvegarde, par ex. en utilisant une commande comme celle-ci:

free -mt

Si vous vous épuisez la mémoire pendant le vidage, vous obtiendrez

mysqldump: Erreur 2013: connexion perdue

1
Ranjeet Ranjan

J'ai trouvé:

--max-allowed-packet=1G --net-buffer-length=32704

... le fait fonctionner là où il ne l'était pas (de manière fiable) auparavant, malgré les changements nets de délai de lecture/écriture, TCP keepalives etc.

Le max_allowed_packet les paramètres seuls ne l'ont pas fait fonctionner, donc peut ne pas être nécessaire si net_buffer_length est utilisé. - ralph-bolton

Modification de max-allowed-packet et net-buffer-length semble bien mieux que de désactiver les insertions étendues. - kristofer

Voir aussi Quel max_allowed_packet est assez grand, et pourquoi dois-je le changer?

1
user126897