sql >> Database >  >> RDS >> Mysql

Verloren verbinding met mysql bij gebruik van mysqldump, zelfs met max_allowed_packet parameter

Probeer de --quick . toe te voegen optie naar uw mysqldump opdracht; het werkt beter met grote tafels. Het streamt de rijen van de resultatenset naar de uitvoer in plaats van de hele tabel te slurpen en vervolgens weg te schrijven.

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

Je kunt ook proberen de --compress . toe te voegen optie toe aan uw mysqldump-opdracht. Dat maakt het gebruik van het meer netwerkvriendelijke gecomprimeerde verbindingsprotocol voor uw MySQL-server. Merk op dat je nog steeds de gzip . nodig hebt pijp; Het gecomprimeerde protocol van MySQL zorgt er niet voor dat de dump uit mysqldump komt gecomprimeerd.

Het is ook mogelijk dat de server zijn verbinding met de mysqldump aan het timen is cliënt. U kunt proberen de time-outduur opnieuw in te stellen. Maak op een andere manier verbinding met uw server en voer deze vragen uit, voer vervolgens uw mysqldump . uit baan.

Deze stellen de time-outs in op één kalenderdag.

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

Ten slotte, als uw server ver weg is van uw machine (via routers en firewalls), kan er iets zijn dat mysqldump verstoort 's verbinding. Sommige inferieure routers en firewalls hebben tijdslimieten voor NAT-sessies (netwerkadresvertaling). Ze zouden die sessies in leven moeten houden terwijl ze in gebruik zijn, maar sommige doen dat niet. Of misschien bereikt u een tijd- of groottelimiet die door uw bedrijf is geconfigureerd voor externe verbindingen.

Probeer in te loggen op een machine dichter bij de server en draai mysqldump Gebruik dan een andere manier (sftp?) om je gz-bestand naar je eigen machine te kopiëren.

Of misschien moet u de dump van dit bestand segmenteren. Je kunt zoiets doen (niet debuggen).

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....

Herhaal dat dan met deze regels.

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

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

totdat je alle rijen hebt. Pijn in de nek, maar het zal werken.



  1. 3 manieren om rijen te vinden die hoofdletters bevatten in SQLite

  2. Opgeslagen procedure oproepen met VBA

  3. ProxySQL:alle bronnen van verschillende Nines

  4. Moet ik de strikte modus van MySQL uitschakelen?