Mysql
 sql >> Base de données >  >> RDS >> Mysql

obtenir une connexion perdue à mysql lors de l'utilisation de mysqldump même avec le paramètre max_allowed_packet

Essayez d'ajouter le --quick option à votre mysqldump commande; cela fonctionne mieux avec de grandes tables. Il diffuse les lignes du jeu de résultats vers la sortie plutôt que d'avaler toute la table, puis de l'écrire.

 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
 gzip  > dump_test.sql.gz

Vous pouvez également essayer d'ajouter le --compress option à votre commande mysqldump. Cela lui permet d'utiliser le protocole de connexion compressé plus convivial pour le réseau à votre serveur MySQL. Notez que vous avez toujours besoin du gzip tuyau; Le protocole compressé de MySQL ne fait pas sortir le vidage de mysqldump compressé.

Il est également possible que le serveur expire sa connexion au mysqldump client. Vous pouvez essayer de réinitialiser les durées d'expiration. Connectez-vous à votre serveur par d'autres moyens et émettez ces requêtes, puis exécutez votre mysqldump travail.

Ceux-ci fixent les délais d'expiration à un jour calendaire.

    SET GLOBAL wait_timeout=86400;
    SET GLOBAL interactive_timeout=86400;

Enfin, si votre serveur est éloigné de votre machine (via des routeurs et des pare-feu), quelque chose peut perturber mysqldump la connexion. Certains routeurs et pare-feu inférieurs ont des limites de temps sur les sessions NAT (traduction d'adresses réseau). Ils sont censés maintenir ces sessions en vie pendant leur utilisation, mais certains ne le font pas. Ou peut-être que vous atteignez une limite de temps ou de taille configurée par votre entreprise pour les connexions externes.

Essayez de vous connecter à une machine plus proche du serveur et d'exécuter mysqldump dessus. Utilisez ensuite d'autres moyens (sftp ?) pour copier votre fichier gz sur votre propre machine.

Ou, vous devrez peut-être segmenter le vidage de ce fichier. Vous pouvez faire quelque chose comme ça (non débogué).

mysqldump  -uroot -h my.host -p'mypassword'  \ 
          db_name table_name --skip-create-options --skip-add-drop-table \
          --where="id>=0 AND id < 1000000" | \
          gzip....

Ensuite, répétez cela avec ces lignes.

          --where="id>=1000000 AND id < 2000000" | \

          --where="id>=2000000 AND id < 3000000" | \
          ...

jusqu'à ce que vous obteniez toutes les lignes. Douleur dans le cou, mais ça marchera.