Wie importiere ich eine SQL-Datei über die Befehlszeile in MySQL?

2035

Ich habe eine .sqlDatei mit einem Export von phpMyAdmin. Ich möchte es über die Befehlszeile auf einen anderen Server importieren.

Ich habe eine Windows Server 2008 R2-Installation. Ich habe die .sqlDatei auf dem Laufwerk C abgelegt und diesen Befehl ausprobiert

database_name < file.sql

Es funktioniert nicht. Ich bekomme Syntaxfehler.

  • Wie kann ich diese Datei problemlos importieren?
  • Muss ich zuerst eine Datenbank erstellen?
Jaylen
quelle
7
Mögliches Duplikat der MYSQL-Dump-Datei mit Befehlszeile wiederherstellen
Bill Karwin
2
Mögliches Duplikat von stackoverflow.com/questions/11407349/…
AZinkey
7
Was ist mit diesen doppelten Typen? Dies ist in der Tat eine hilfreiche Frage mit eigenem Zweck
Valentino Pereira
@ValentinoPereira haben Sie die ursprünglichen Fragendaten überprüft, bevor Sie doppelte Jungs bestimmen
AZinkey
Können Sie ein reproduzierbares Beispiel teilen? database < file.sqlsieht für mich nicht nach einem Befehl aus, und wenn Sie Syntaxfehler sehen, teilen Sie diese bitte mit
Nico Haase

Antworten:

3774

Versuchen:

mysql -u username -p database_name < file.sql

Überprüfen Sie die MySQL-Optionen .

Hinweis 1: Es ist besser, den vollständigen Pfad der SQL-Datei zu verwenden file.sql.

Hinweis 2: Verwenden Sie -Rund --triggers, um die Routinen und Trigger der Originaldatenbank beizubehalten. Sie werden standardmäßig nicht kopiert.

Hinweis-3 Möglicherweise müssen Sie die (leere) Datenbank aus MySQL erstellen, wenn sie noch nicht vorhanden ist und die exportierte SQL nicht enthält CREATE DATABASE(exportiert mit --no-create-dboder -nOption), bevor Sie sie importieren können.

Bansi
quelle
2
Wenn ich die Datei von einem Programm wie Toad aus starte, wird kein Fehler angezeigt, aber wenn ich sie über die Befehlszeile ausführe, wird der von mir erwähnte Fehler
angezeigt
110
Beachten Sie, dass Sie die (leere) Datenbank aus MySQL erstellen müssen, falls sie noch nicht vorhanden ist, bevor Sie sie importieren können.
Skippy le Grand Gourou
17
Ja, denken Sie daran, eine leere Datenbank (falls die Datenbank vorher nicht existiert) von der MySQL-Konsole aus wie folgt zu erstellen:CREATE DATABASE db-name;
Qasim
3
Stellen Sie sicher, dass in der Sicherungsdatei nicht "use 'original_db'" enthalten ist. Obwohl ich die Wiederherstellung der neuen Datenbank "mysql new_db <dump.sql" angegeben habe, war diese in der SQL-Dump-Datei enthalten und hat meine Live-Datenbank überschrieben. Ich bin mir nicht sicher, ob es eine Option gibt, um die Verwendung der angegebenen Datenbank zu erzwingen und die "Verwendung von 'original_db'" in der SQL-Datei zu
ignorieren
7
@ Joe, ja, wenn Sie ein Leerzeichen zwischen '-p' und 'Passwort' haben, wird angenommen, dass 'Passwort' der Datenbankname ist. Alternativ können Sie '-p' ohne Ihr Passwort eingeben und werden dann zur Eingabe eines Passworts aufgefordert, wenn Sie die Eingabetaste drücken.
NotJay
765

Eine häufige Verwendung von mysqldump ist das Erstellen einer Sicherung einer gesamten Datenbank:

shell> mysqldump db_name > backup-file.sql

Sie können die Dump-Datei wie folgt zurück auf den Server laden:

UNIX

shell> mysql db_name < backup-file.sql

Das gleiche gilt für die Windows- Eingabeaufforderung:

mysql -p -u [user] [database] < backup-file.sql

Power Shell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL-Befehlszeile

mysql> use db_name;
mysql> source backup-file.sql;
vladkras
quelle
@Mike Versuchen Sie es in der mysql>Kommandozeile zu starten ? Sie sollten stattdessen Shell verwenden.
Vladkras
Wie verwende ich Shell? Ich benutze mysql5.6 unter Windows Server 2008
Jaylen
Wenn Sie Windows PowerShell verwenden und MySQL db_name <file.sql eingeben, wird die folgende Fehlermeldung angezeigt: Der Operator '<' ist für die zukünftige Verwendung reserviert
Jaylen
31
Seien Sie vorsichtig, wenn Sie> verwenden, um die mysqldump-Ausgabe in eine Datei umzuleiten, insbesondere wenn Sie die Codierung steuern möchten. Stattdessen möchten Sie wahrscheinlich den Parameter --result-file verwenden, damit die Codierung nicht von der Shell / dem Betriebssystem gesteuert wird.
Bernard Chen
1
Richtig, aber ... warum nicht einfach mysqldirekt von Powershell rennen ?
Charles Wood
329

In Bezug auf die Zeit, die für den Import großer Dateien benötigt wird: Vor allem dauert es länger, da die Standardeinstellung von MySQL ist autocommit = true. Sie müssen dies vor dem Importieren Ihrer Datei deaktivieren und dann überprüfen, wie der Import wie ein Juwel funktioniert.

Sie müssen nur Folgendes tun:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Paresh Behede
quelle
5
Gibt es eine Möglichkeit, dies in einer einzelnen Befehlszeile des für den Import verwendeten Befehls mysql zu tun?
Volomike
Beste Antwort inho. Es war der sourceBefehl, den ich vergessen habe. Die meisten von uns möchten dies tun, während wir unter anderem als eigenständiger Befehl angemeldet sind , nicht als Standard-Oneliner für Anmelden> Injizieren> Abmelden über Google Serps.
Davidkonrad
19
Ich stimme zu, dass dies die beste Antwort ist . Die autocommit=0Portion machte einen großen Unterschied in Bezug auf die Geschwindigkeit.
Aexl
2
Funktioniert das autocommit=0bei größeren Dateien? wie 8 GB SQL-Datei.
Neuling
3
Das Ausschalten ist nicht immer erforderlich autocommit. Es lohnt sich, den Datenbankspeicherauszug in einem Editor zu überprüfen, der möglicherweise bereits beginnt SET autocommit=0;.
Hashchange
127

Unter allen Antworten für das obige Problem ist dies die beste:

 mysql> use db_name;
 mysql> source file_name.sql;
Manoj Kumar
quelle
Hinweis oben fehlgeschlagen auf Fehler, dass db bereits existiert, aber dies scheint zu funktionieren
luky
74

Mit diesem Befehl können wir SQL von der Befehlszeile importieren:

mysql -u username -p password db_name < file.sql

Zum Beispiel, wenn der Benutzername rootund das Passwort ist password. Und Sie haben einen Datenbanknamen als bankund die SQL-Datei ist bank.sql. Dann machen Sie einfach so:

mysql -u root -p password bank < bank.sql

Denken Sie daran, wo sich Ihre SQL-Datei befindet. Wenn sich Ihre SQL-Datei im DesktopOrdner / Verzeichnis befindet, wechseln Sie in das Desktop-Verzeichnis und geben Sie den folgenden Befehl ein:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

Und wenn Sie sich im ProjectVerzeichnis befinden und sich Ihre SQL-Datei im DesktopVerzeichnis befindet. Wenn Sie über das ProjectVerzeichnis darauf zugreifen möchten, können Sie Folgendes tun:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Amrit Dhungana
quelle
22
Es sollte kein Leerzeichen zwischen -pundpassword
Ejaz
Jap. Das würde nicht funktionieren. Richtig wäremysql -u root -p"password" bank < bank.sql
Armin
4
warum kannst du einfach nicht in einer Zeile antworten? mysql -u username -ppassword db_name < file.sql
Naveed
6
Während dies völlig unabhängig von dieser Frage / Antwort ist, ziehen Sie es bei der Arbeit mit nicht trivialen Datenbanken vor, das Kennwort NICHT mit demselben Befehl im Klartext einzugeben. Wenn Sie das Passwort nicht als Teil des Befehls
angeben,
3
Besonders wegen.bash_history
Neil Chowdhury
64

Einfachste Möglichkeit zum Importieren in Ihr Schema:

Melden Sie sich bei MySQL an und geben Sie die unten genannten Befehle ein.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Ammad
quelle
5
Dies funktioniert ohne den Befehl 'use' für Dumps mit Multilpe-Datenbank
Hayden Thring
1
Ich habe versucht, einen Speicherauszug aus einer Datenbank mit einem anderen Namen zu importieren, aber mit derselben Struktur hat die richtige Antwort des Autors nicht funktioniert. Es wurde eine neue Datenbank erstellt, die nach der Datenbank in der Speicherauszugsdatei benannt ist. Diese Antwort hier tat, was ich wollte, danke Mann
Wuelber Castillo
1
groß! genau das, wonach ich gesucht habe!
Sergei Zahharenko
2
Dies überwacht auch die Skriptausführung, viel besser als die anderen Antworten
Refex
61

Wenn Sie die Datenbank bereits haben, importieren Sie dumpdie sqlDatei oder die Datei wie folgt :

mysql -u username -p database_name < file.sql

Wenn Sie dies nicht tun, müssen Sie die entsprechende Datenbank (leer) in MySQL erstellen. Melden Sie sich dazu zuerst an der MySQLKonsole an, indem Sie den folgenden Befehl im Terminal oder in cmd ausführen

mysql -u userName -p;

Und wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein.

Erstellen Sie als Nächstes eine Datenbank und verwenden Sie sie:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Importieren Sie dann die Datei sqloder die dumpDatei aus

mysql> source pathToYourSQLFile;

Hinweis: Wenn sich Ihr Terminal nicht an dem Ort befindet, an dem die Datei dumpoder sqlvorhanden ist, verwenden Sie den obigen relativen Pfad.

Kasun Siyambalapitiya
quelle
Ihre Antwort hatte eine grundlegende Lösung für MySQL-Anfänger wie mich: 1.Erstellen Sie die Datenbank, falls keine vorhanden ist. 2.Zeigen Sie mit der Quelldatei auf die erstellte Datenbank, um Daten / Metadaten zu importieren.
Sumanth Lazarus
60
  1. Öffnen Sie die MySQL-Befehlszeile
  2. Geben Sie den Pfad Ihres MySQL-Bin-Verzeichnisses ein und drücken Sie Enter
  3. Fügen Sie Ihre SQL-Datei in den binOrdner des MySQL-Servers ein.
  4. Erstellen Sie eine Datenbank in MySQL.
  5. Verwenden Sie diese bestimmte Datenbank, in die Sie die SQL-Datei importieren möchten.
  6. Geben Sie source databasefilename.sqlund einEnter
  7. Ihr SQL-Datei-Upload erfolgreich.
user4412947
quelle
2
Geben Sie den Pfad Ihres MySQL-Bin-Verzeichnisses ein und drücken Sie
Ramesh Pareek
46

Eine Lösung, die für mich funktioniert hat, ist unten:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Shiks
quelle
Dies funktionierte bei mir mit MySQL Command Line Client, nachdem ich meine SQL-Datei im richtigen Windows Explorer im Verzeichnisansicht / bin abgelegt hatte. Danke
klewis
3
Etwas langsam, hört aber nicht dazwischen auf und sagt nicht, dass der MySQL-Server weg ist.
Jaskaran Singh
39

Verwenden Sie den folgenden Befehl, um eine Datenbank in eine SQL-Datei zu sichern.

mysqldump -u username -p database_name > database_name.sql

Gehen Sie folgendermaßen vor, um eine SQL-Datei in eine Datenbank zu importieren (stellen Sie sicher, dass Sie sich im selben Verzeichnis wie die SQL-Datei befinden, oder geben Sie den vollständigen Pfad zur Datei an):

mysql -u username -p database_name < database_name.sql
Adeleke Akinade
quelle
37

Wechseln Sie in das Verzeichnis, in dem sich die ausführbare MySQL-Datei befindet. -ufür Benutzername und -pzur Eingabe des Passworts:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
quelle
5
Ich denke, es wäre hilfreicher für das OP und weitere Fragen, wenn Sie Ihrer Absicht eine Erklärung hinzufügen.
Reporter
Dies würde nur funktionieren, wenn Sie mysql.exe in Ihren Windows-Umgebungsvariablen definiert haben. Wenn nicht, sollten Sie den gesamten Pfad zur Datei mysql.exe eingeben. Und Ihre Syntax ist falsch. ZB: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u your_username -p DB_NAME <Dateiname.sql" Mehr Infos hier: wpy.me/en/blog/...
Wappy
31

Ich denke, es ist erwähnenswert, dass Sie auch eine komprimierte (komprimierte) Datei mit der folgenden zcatAbbildung laden können :

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Francesco Casula
quelle
28

Verwenden Sie den folgenden Befehl, um eine einzelne Datenbank zu importieren.

mysql -u username -p password dbname < dump.sql

Verwenden Sie den folgenden Befehl, um mehrere Datenbankspeicherauszüge zu importieren.

mysql -u username -p password < dump.sql
Leopathu
quelle
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
user3546602
quelle
17

Verwenden Sie Folgendes, um mehrere SQL-Dateien gleichzeitig zu importieren:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Zum einfachen Importieren:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Für WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

Für XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Abdul Rehman Janjua
quelle
16

Sie müssen den Namen der Datenbank nicht in der Befehlszeile angeben, wenn die SQL-Datei CREATE DATABASE IF NOT EXISTS db_nameund USE db_nameAnweisungen enthält .

Stellen Sie einfach sicher, dass Sie eine Verbindung mit einem Benutzer herstellen, der über die Berechtigungen zum Erstellen der Datenbank verfügt, wenn die in der SQL-Datei angegebene Datenbank nicht vorhanden ist.

Ruben
quelle
14

Importieren Sie eine Datenbank

  1. Zum Fahren gehen:

    command: d:
  2. MySQL-Login

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Es wird nach pwd fragen. Geben Sie es ein:

    pwd
  4. Wählen Sie die Datenbank aus

    use DbName;
  5. Geben Sie den Dateinamen an

    \.DbName.sql
Pritam Chaudhari
quelle
11

Gehen Sie in das Verzeichnis, in dem Sie MySQL haben.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Verwenden Sie die -all-databasesOption, um alle Datenbanken zu sichern, und es muss kein Datenbankname mehr angegeben werden.

mysqldump -u username -ppassword all-databases > dump.sql

Oder Sie können dazu einige GUI-Clients wie SQLyog verwenden.

Sathish D.
quelle
11

Verwenden:

mysql -u root -p password -D database_name << import.sql

Verwenden Sie die MySQL-Hilfe für Details - mysql --help.

Ich denke, dies werden in unserem Kontext nützliche Optionen sein:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Was macht Spaß, wenn wir eine große Datenbank importieren und keinen Fortschrittsbalken haben? Verwenden Sie den Pipe Viewer und sehen Sie sich die Datenübertragung durch das Pipe an

Für Mac brew install pv

Für Debian / Ubuntu , apt-get install pv.

Weitere Informationen finden Sie unter pv - Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36
Siva Praveen
quelle
Für Centos:yum install pv
Jonny
10

Fügen Sie die --forceOption hinzu :

mysql -u username -p database_name --force < file.sql
ktaria
quelle
9

Während die meisten Antworten hier nur den einfachen Befehl erwähnen

mysql -u Datenbankbenutzer -p [Datenbankname] <Datenbankdatei.sql

Heutzutage ist es durchaus üblich, dass Datenbanken und Tabellen eine utf8-Kollatierung haben, bei der dieser Befehl nicht ausreicht. Wenn utf8-collation in den exportierten Tabellen vorhanden ist, muss dieser Befehl verwendet werden:

mysql -u Datenbankbenutzer -p - Standard-Zeichensatz = utf8 [Datenbankname] <Datenbankdatei.sql

Surley das funktioniert auch für andere Zeichensätze, wie man die richtige Notation zeigt, kann man hier sehen:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

In einem Kommentar wurde auch erwähnt, dass, wenn eine Datenbank nie existiert, zuerst eine leere Datenbank erstellt werden musste. Dies kann in einigen Fällen richtig sein, hängt jedoch von der Exportdatei ab. Wenn die exportierte Datei bereits den Befehl zum Erstellen der Datenbank enthält, muss die Datenbank niemals in einem separaten Schritt erstellt werden, was sogar zu einem Fehler beim Import führen kann. Beim Importieren ist es daher ratsam, zuerst in der Datei nachzuschauen, welche Befehle dort enthalten sind. Beim Exportieren sollten die Einstellungen beachtet werden, insbesondere wenn die Datei sehr groß und in einem Editor schwer zu lesen ist.

Es gibt noch weitere Parameter für den Befehl, die hier aufgelistet und erklärt werden:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Wenn Sie eine andere Datenbankversion verwenden, sollten Sie auch nach der entsprechenden Version des Handbuchs suchen. Die genannten Links beziehen sich auf MySQL Version 5.7.

David
quelle
9

Zum Exportieren einer Datenbank:

mysqldump -u username -p database_name > file.sql

Zum Importieren einer Datenbank:

mysql -u username -p database_name < file.sql
user777388
quelle
8

Der folgende Befehl funktioniert für mich über die Befehlszeile (cmd) unter Windows 7 unter WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Sieger
quelle
7

Ich dachte, es könnte für diejenigen nützlich sein, die Mac OS X verwenden :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Ersetzen Sie xamppmit mampoder anderen Web - Servern.

Giri
quelle
6

Manchmal ist auch der definierte Port sowie die Server- IP-Adresse dieser Datenbank von Bedeutung ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 
JohnSharath
quelle
6

In die Datenbank importieren:

mysql -u Benutzername -p Datenbankname </ Dateipfad / Dateiname.sql

Export aus der Datenbank:

mysqldump -u Benutzername -p Datenbankname> / Dateipfad / Dateiname.sql

Nach diesen Befehlen werden Sie nach Ihrem MySQL-Passwort gefragt.

NeeruKSingh
quelle
5

Erstellen Sie zu Sicherungszwecken eine BAT-Datei und führen Sie diese BAT-Datei mit dem Taskplaner aus . Es wird eine Sicherungskopie der Datenbank erstellt. Kopieren Sie einfach die folgende Zeile, fügen Sie sie in den Editor ein, speichern Sie die .bat-Datei und führen Sie sie auf Ihrem System aus.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
user3728517
quelle
5

Die folgenden Schritte helfen beim Hochladen file.sqlin die MySQL-Datenbank.

Schritt 1: Laden Sie file.sql.zipin einem beliebigen Verzeichnis entpacken und dort
Hinweis : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Schritt 2: Navigieren Sie nun in dieses Verzeichnis. Beispiel:cd /var/www/html

Schritt 3: mysql -u username -p database-name < file.sql
Geben Sie das Passwort ein und warten Sie, bis der Upload abgeschlossen ist.

Ramesh Sinha
quelle
5

Ich bin immer wieder auf das Problem gestoßen, bei dem die Datenbank nicht erstellt wurde.

Ich habe es so repariert

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
David Silva Smith
quelle