Pipe gunzip i mysql, aby wystrzelić zrzut i zaimportować go

27

Mam plik zrzutu sql .gz (przykład: foo.sql.gz), który chcę zaimportować do mojej bazy danych za pomocą klasycznej komendy mysql.

gunzip -c foo.sql.gz > foo.sql

mysql -uroot -ppassword foo < foo.sql

foo to baza danych.

Jak mogę potokować te dwa polecenia w jednym?

Wypróbowany

gunzip -c foo.sql.gz | mysql -uroot -ppassword foo

ale nie działa; dostajęgzip: stdout: Broken pipe

apelliciari
źródło
6
Do Twojej wiadomości naprawdę nie chcesz przekazać hasła mysql w wierszu poleceń. To prowadzi do przechowywania go w ~ / .bash_history, aby wszyscy mogli to zobaczyć. Jeśli wpiszesz -p, wyświetli się prośba o podanie hasła, które jest o wiele bezpieczniejsze (i nie psuje też rury
Zcat
1
Twoja komenda orignal działałaby, gdyby gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Odpowiedzi:

40
zcat foo.sql.gz | mysql -uroot -ppassword foo

To też odejdzie foo.sql.gzbez zmian.

Nifle
źródło
1
Pod względem prędkości działa to znacznie wolniej niż gunzip && mysql -e "use unzipped.sql".
podarok
13

Dla tych o Max OSX jest to błąd ze zcattak trzeba użyć gzcatzamiast.

gzcat foo.sql.gz | mysql -uroot -ppassword foo
SammyK
źródło
2

Wszystkie pozostałe odpowiedzi zalecają wpisanie hasła w poleceniu. Jest to bardzo zła praktyka i stanowi zagrożenie dla bezpieczeństwa. Proszę, NIE Rób tego.

Możesz pozostawić hasło puste w poleceniu, niż poprosi o interaktywne wprowadzenie hasła. W ten sposób hasło nie jest zapisywane w historii bash.

gunzip < dump.sql.gz | mysql -u username -p databasename
Елин Й.
źródło