J'ai une base de données installée, que je voudrais sauvegarder dans mysql. Le problème 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?
Réponses:
Je pourrais facilement suggérer de modifier les paramètres InnoDB, ce qui pourrait être un peu lourd juste pour faire fonctionner 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 de 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 sur
Sep 01, 2011
(le serveur MySQL a disparu 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.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
avantAug 12, 2011
: Pourquoi le fichier mysqldump est-il si volumineux?Aug 09, 2013
: Les données de sauvegarde / exportation de la table des pièces jointes MySQL 5.5 continuent d'échouer!Nov 16, 2014
: Comment grouper plusieurs instructions d'insertion pour le vidage de base de données avec MySQL?SUGGESTION # 2: vidage des données binaires sous forme hexadécimale (FACULTATIF)
Pour rendre les données binaires de mysqldump plus portables, videz ces données en hexadécimal
Mauvaise nouvelle: cela gonflera un peu plus le mysqldump
ESSAIE !!!
Note latérale: La taille maximale de max_allowed_packet est de 1G
la source
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, soit 20 heures). Mais je l'ai fait intentionnellement juste pour exclure toute chance. Je suis en train de trouver une valeur de timeout optimale.
la source
Incluez simplement les éléments suivants dans votre fichier de configuration my.ini (Windows) ou my.cnf (Linux).
la source
Assurez-vous d'avoir suffisamment de mémoire pour effectuer un vidage. Veuillez continuer à vérifier la mémoire pendant la sauvegarde, par exemple en utilisant une commande comme celle-ci:
Si vous vous épuisez la mémoire pendant le vidage, vous obtiendrez
la source
J'ai trouvé:
... le fait fonctionner là où il ne l'était pas (de manière fiable) auparavant, malgré les changements de délai d'expiration de lecture / écriture, les keepalives TCP, etc.
Les
max_allowed_packet
paramètres seuls ne l'ont pas fait fonctionner, donc peut ne pas être nécessaire s'ilnet_buffer_length
est utilisé. - ralph-boltonModifier
max-allowed-packet
etnet-buffer-length
semble beaucoup mieux que de désactiver les insertions étendues. - kristoferVoir aussi Quel max_allowed_packet est assez grand et pourquoi dois-je le changer?
la source