Prova att lägga till --quick
alternativet till din mysqldump
kommando; det fungerar bättre med stora bord. Den strömmar raderna från resultatuppsättningen till utdata istället för att slurpa hela tabellen och sedan skriva ut den.
mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
gzip > dump_test.sql.gz
Du kan också prova att lägga till --compress
alternativet till ditt mysqldump-kommando. Det gör att den använder det mer nätverksvänliga komprimerade anslutningsprotokollet till din MySQL-server. Observera att du fortfarande behöver gzip
rör; MySQL:s komprimerade protokoll gör inte att dumpen kommer ut från mysqldump
komprimerad.
Det är också möjligt att servern tar timeout för sin anslutning till mysqldump
klient. Du kan försöka återställa tidsgränsen. Anslut till din server på något annat sätt och skicka dessa frågor, kör sedan din mysqldump
jobb.
Dessa ställer in timeouts till en kalenderdag.
SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;
Slutligen, om din server är långt borta från din maskin (via routrar och brandväggar) kan något störa mysqldump
s anslutning. Vissa sämre routrar och brandväggar har tidsgränser för NAT-sessioner (nätverksadressöversättning). De är tänkta att hålla dessa sessioner vid liv medan de används, men vissa gör det inte. Eller så kanske du når en tids- eller storleksgräns som konfigurerats av ditt företag för externa anslutningar.
Försök att logga in på en maskin närmare servern och kör mysqldump
Använd sedan något annat sätt (sftp?) för att kopiera din gz-fil till din egen maskin.
Eller så kanske du måste segmentera dumpen för den här filen. Du kan göra något sånt här (inte felsökt).
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....
Upprepa sedan det med dessa rader.
--where="id>=1000000 AND id < 2000000" | \
--where="id>=2000000 AND id < 3000000" | \
...
tills du får alla rader. Ont i nacken, men det kommer att fungera.