Wie lade ich eine sql.gz-Datei in meine Datenbank? (importieren)

150

Ich versuche, eine gezippte SQL-Datei direkt in mysql zu importieren. Ist das der richtige Weg?

mysql -uroot -ppassword mydb > myfile.sql.gz
Alex
quelle
14
Selbst wenn Sie die GZIP-Seite der Frage ignorieren, zeigt Ihr Pfeil in die falsche Richtung ...
Matt Fletcher

Antworten:

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

>schreibt die Ausgabe des mysqlBefehls stdoutin die Datei, myfile.sql.gzdie höchstwahrscheinlich nicht das ist, was Sie wollen. Zusätzlich werden Sie mit diesem Befehl zur Eingabe des Passworts des MySQL-Benutzers "root" aufgefordert.

joschi
quelle
15
Als gute Sicherheitspraxis würde ich mein Passwort in die Kommandozeile eingeben und mysql danach fragen lassen.
Prof. Moriarty,
9
Oder noch besser: ~/.my.cnfMit den Zugangsdaten erstellen . ;)
joschi
5
Als @Prof. Moriarty explans, können Sie den Befehl ändern, um das Kennwort nicht über zu verwenden zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Der letzte Parameter ist die Datenbank, die Sie verwenden möchten, nicht Ihr Passwort.
bafromca
6
Um etwas richtig @ Prof.Moriarty Kommentar, wäre eine gute Sicherheitspraxis sein , um nicht mein Passwort auf der Kommandozeile zu setzen (wo es in der Geschichte gespeichert werden erhalten, oder über die Schulter zu sehen ist ), und lassen Sie MySQL danach fragen. Allein das -p-Flag veranlasst MySQL, bei einer Eingabeaufforderung nach dem Kennwort zu fragen.
George
4
+1 für etwas, das die verdammte Datenbank-Dump komprimiert lässt
Dmitri DB
81

Um beim Importieren einer sql.gz-Datei einen Fortschrittsbalken anzuzeigen, laden Sie pvFolgendes herunter und verwenden Sie Folgendes:

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

In CentOS / RHEL können Sie pv mit installieren yum install pv.

In Debian / Ubuntu apt-get install pv.

In MAC, brew install pv

Banjer
quelle
2
pvscheint auch in den Ubuntu-Repos zu sein (zumindest in 12.04 LTS ist es das), aber du musst es wieder tun sudo apt-get install pv, um es zu bekommen. Danke Banjer, das ist perfekt für große Datenbankimporte!
Toon81
Ich musste pv mydump.sql.gz | ausführen gunzip | mysql -u root mein_Datenbankname. Das lag daran, dass ich Tabellen importierte und kein Kennwort für meinen Root-Benutzer festgelegt habe
Cristiano Mendonça,
In MAC,brew install pv
Score
54

Am einfachsten ist es, die Datenbankdatei vor dem Import zu entpacken. Auch wie von @Prof erwähnt. In jedem Fall sollten Sie das Kennwort nicht im Befehl angeben (Sie werden nach dem Kennwort gefragt). Dieser Befehl aus dem Webcheatsheet entpackt und importiert die Datenbank auf einmal:

gunzip < myfile.sql.gz | mysql -u root -p mydb
icc97
quelle
1
Außerdem muss mydb vor dem Import erstellt werden. Dadurch wird die Datenbank nicht für Sie erstellt.
Siddhartha,
Ich fand meine Rohrleitungen gunzipauf einer 10 GB komprimierten Datei verursacht mein Import zum Einfrieren. Ich bin mir nicht sicher, ob dies auf Speicherbeschränkungen oder etwas zurückzuführen ist, aber ich würde mich in Zukunft auf die Seite stellen, Schritt für Schritt vorzugehen.
Ryan Tuck
@ RyanTuck Das stößt an die Grenzen dieser Art von Prozessen :)
ICC97
@ Siddhartha Das hängt von der SQL-Dump-Datei ab. Manchmal enthalten sie Anweisungen zum Erstellen von Datenbanken.
Rooby
@rooby das macht Sinn.
Siddhartha
5

Unter macOS habe ich Folgendes verwendet:

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

Geben Sie Ihr Passwort ein und voila!

Qasim
quelle
4

Überprüfen Sie auch, ob die SQL-Datei eine USE-Anweisung enthält. Das Angeben der Datenbank in der Befehlszeile garantiert nicht, dass die Daten dort landen, wenn in der SQL-Datei ein anderes Ziel angegeben ist.

ikso
quelle
2
Sie müssen nur den Befehl verlängern , wie so: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. Die akzeptierte Antwort verwendet diesen Ansatz.
bafromca
1

Verwenden Sie für bzip2- komprimierte Dateien (.sql.bz2):

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

ODER

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

Fortschrittsbalken zu sehen.

TimSparrow
quelle
0

Sie können mit -c, --stdout, --to-stdoutOption gunzipBefehl

zum Beispiel:

gunzip -c file.sql.gz | mysql -u root -p database
Ali Jazayeri
quelle