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


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.