Jak załadować plik sql.gz do mojej bazy danych? (Importowanie)

150

Próbuję zaimportować spakowany gzip plik SQL bezpośrednio do mysql. Czy to dobra droga?

mysql -uroot -ppassword mydb > myfile.sql.gz
Alex
źródło
14
Nawet ignorując gzipową stronę pytania, twoja strzała wskazuje niewłaściwy kierunek ...
Matt Fletcher

Odpowiedzi:

238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>zapisze dane wyjściowe mysqlpolecenia stdoutw pliku, myfile.sql.gzco najprawdopodobniej nie jest tym, czego chcesz. Dodatkowo, to polecenie wyświetli monit o podanie hasła użytkownika „root” MySQL.

joschi
źródło
15
Jako dobrą praktykę bezpieczeństwa umieściłem moje hasło w linii poleceń, pozwoliłem mysql o to poprosić.
Prof. Moriarty
9
Lub jeszcze lepiej: twórz ~/.my.cnfprzy użyciu poświadczeń. ;)
joschi
5
Jako @Prof. Moriarty wyjaśnia, możesz zmodyfikować polecenie, aby nie używać hasła przez zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Będzie wiedział, że ostatnim parametrem jest baza danych, której chcesz użyć, a nie hasło.
bafromca
6
Aby delikatnie poprawić komentarz @ Prof. Moriarty'ego, dobrą praktyką bezpieczeństwa byłoby nie umieszczanie mojego hasła w linii poleceń (gdzie zostanie zapisane w historii lub widoczne przez ramię) i pozwolenie MySQL o to poprosić. Sama flaga -p spowoduje, że MySQL zapyta o hasło.
George,
4
+1 za coś, co pozostawia cholerny zrzut bazy danych skompresowany
Dmitri DB
81

Aby wyświetlić pasek postępu podczas importowania pliku sql.gz, pobierz pvi użyj:

pv mydump.sql.gz | gunzip | mysql -u root -p

W CentOS / RHEL możesz zainstalować pv za pomocą yum install pv.

W Debian / Ubuntu apt-get install pv.

W MAC brew install pv

Banjer
źródło
2
pvwydaje się, że jest też w repozytoriach Ubuntu (przynajmniej w 12.04 LTS), ale znowu musisz to zrobić, sudo apt-get install pvaby je zdobyć. Dzięki Banjer, jest to idealne rozwiązanie do importowania dużych baz danych!
toon81
Musiałem uruchomić pv mydump.sql.gz | gunzip | mysql -u root nazwa_bazy_danych. To dlatego, że importowałem tabele i nie mam hasła dla mojego roota
Cristiano Mendonça
W MAC,brew install pv
wynik
54

Najprostszym sposobem jest rozpakowanie pliku bazy danych przed importem. Również wspomniane przez @Prof. Moriarty , nie powinieneś podawać hasła w poleceniu (zostaniesz poproszony o podanie hasła). To polecenie pobrane z arkusza kontrolnego web rozpakowuje i importuje bazę danych za jednym razem:

gunzip < myfile.sql.gz | mysql -u root -p mydb
icc97
źródło
1
Ponadto przed importem należy utworzyć mydb. To nie tworzy dla ciebie bazy danych.
Siddhartha,
znalazłem, że moje gunzipprzesyłanie strumieniowe w skompresowanym pliku 10 GB spowodowało zawieszenie się importu. nie jestem pewien, czy jest to spowodowane ograniczeniami pamięci lub czymś innym, ale popełniłbym błąd, robiąc krok po kroku w przyszłości.
Ryan Tuck
@RyanTuck To przesuwa granice tego rodzaju procesów :)
icc97
@ Siddhartha To zależy od pliku zrzutu SQL. Czasami obejmują tworzenie instrukcji bazy danych.
rooby
@rooby to ma sens.
Siddhartha,
5

Na macOS użyłem tego:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Wpisz swoje hasło i voila!

Qasim
źródło
4

Sprawdź także, czy w pliku SQL znajduje się instrukcja USE. Określenie bazy danych w wierszu polecenia nie gwarantuje, że dane tam znajdą się, jeśli w pliku SQL zostanie określone inne miejsce docelowe.

ikso
źródło
2
Wystarczy przedłużyć polecenie tak: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. W przyjętej odpowiedzi zastosowano to podejście.
bafromca
1

W przypadku plików skompresowanych bzip2 (.sql.bz2) użyj:

bzcat <file> | mysql -u <user> -p <database>

LUB

pv <file> | bunzip2 | mysql -u <user> -p <database>

aby zobaczyć pasek postępu.

TimSparrow
źródło
0

Możesz użyć -c, --stdout, --to-stdoutopcji gunzippolecenia

na przykład:

gunzip -c file.sql.gz | mysql -u root -p database
Ali Jazayeri
źródło