2012-03-27 22 views
16

Próbuję zrozumieć, jak mysqldump działa:mysqldump kompresji

gdybym wykonać mysqldump na moim komputerze i połączyć się ze zdalnym serwerem:

mysqldump -u mark -h 34.32.23.23 -pxxx --quick | gzip > dump.sql.gz 

będzie serwer kompresji i wysłać go do mnie jako gzip lub czy mój komputer najpierw odbierze wszystkie dane, a następnie skompresuje?

Ponieważ mam bardzo duży zdalny db do eksportu, i chciałbym poznać najszybszy sposób, aby to zrobić w sieci!

+0

Jeśli linia ta jest wykonywana na komputerze wtedy 'gzip' będzie działał na komputerze też. Oznacza to, że surowe zrzuty zostaną zdekompresowane. – pritaeas

Odpowiedz

29

Należy skorzystać z ssh + SCP,
ponieważ wysypisko na localhost jest szybsza,
i trzeba tylko scp nad gzip (mniejszym obciążeniu sieci)

prawdopodobnie można to zrobić

ssh [email protected] "mysqldump -u mark -h localhost -pxxx --quick | gzip > /tmp/dump.sql.gz" 

scp [email protected]:/tmp/dump.sql.gz . 

(opcjonalnie katalog/tmp, należy zmienić na cokolwiek katalogu wygodnego wyglądu)

+0

fajny pomysł, problem polega na tym, że mam do czynienia z cleardb (który jest komercyjnym przykładem amazon rds) i nie udało mi się zalogować przez ssh .. nie wiem czy to będzie dać! –

+0

sprawdzić przy pomocy? – ajreal

+0

tak, to jest następny krok. Ale na (praktycznie) udostępnionym db nie sądzę, że pozwolą mi to zrobić :( –

0

To jak to zrobić:

Czy częściowy eksport korzystając SELECT INTO OUTFILE i tworzyć pliki na tym samym serwerze.

Jeśli Twoja tabela zawiera 10 milionów wierszy. Wykonaj częściowy eksport 1 miliona wierszy na raz, za każdym razem w osobnym pliku.

Gdy pierwszy plik jest gotowy, możesz go skompresować i przesłać. W międzyczasie MySQL może kontynuować eksport danych do następnego pliku.

Na drugim serwerze można rozpocząć ładowanie pliku do nowej bazy danych.

BTW, wiele z tego może być skryptowane.

+0

OUTFILE nie jest możliwe w Amazon RDS – codewandler

11

Czy próbowałeś parametr --compress, oczywiście?

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_compress

+0

tak, to redukuje dużo transferu danych! Ale to, co chciałem zrozumieć, to: jeśli mysqldump buforuje dane na moim komputerze lub na zdalnym serwerze ... Z tego co zrozumiałem, najpierw przesyła wszystkie dane na moim komputerze. Czy mam rację? –

+0

Nie ma zbyt wiele dokumentacji na temat działania parametru '--compress' Mogę zgadnąć domysły, ale muszę sprawdzić źródło, żeby się upewnić, ale myślałem, że twoje pytanie brzmiało: skompresowana strona serwera lub klienta ide. W twoim przykładzie jest to z pewnością strona klienta.Jeśli widzisz, że parametr compress zmniejsza transfer danych, to powinno odpowiedzieć na twoje pytanie, że kompresuje to po stronie serwera. –