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

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.


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


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

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!


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.


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.


0

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

na przykład:

gunzip -c file.sql.gz | mysql -u root -p database
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.