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?
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:
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
Aug 12, 2011
: Pourquoi le fichier mysqldump est-il si volumineux?Aug 09, 2013
: la sauvegarde/exportation des données de la table des pièces jointes MySQL 5.5 échoue toujours!Nov 16, 2014
: Comment grouper plusieurs instructions d'insertion pour le vidage de base de données avec MySQL?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
Note latérale: La taille maximale de max_allowed_packet est 1G
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.
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.
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
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
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?