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



Answers

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

shell> mysqldump db_name > backup-file.sql

Sie können die Dump-Datei folgendermaßen auf den Server laden:

UNIX

shell> mysql db_name < backup-file.sql

Das Gleiche in der 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;
Question

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

Ich habe eine Windows Server 2008 R2-Installation. Ich legte die .sql Datei auf dem Laufwerk C , und ich habe diesen Befehl versucht

database_name < file.sql

Es funktioniert nicht Ich bekomme Syntaxfehler.

  • Wie kann ich diese Datei problemlos importieren?
  • Muss ich zuerst eine Datenbank erstellen?



Wenn Sie bereits über die Datenbank verfügen, verwenden Sie Folgendes, um den sql oder die sql Datei zu importieren

mysql -u username -p database_name < file.sql

Wenn Sie nicht die relevante Datenbank (leer) in MySQL erstellen müssen, melden Sie sich zuerst an der MySQL Konsole 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.

Als nächstes erstellen Sie eine Datenbank und verwenden Sie sie

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Importieren Sie dann die sql oder die dump Datei von der Datenbank

mysql> source pathToYourSQLFile;

Hinweis: Wenn sich Ihr Terminal nicht an dem Ort befindet, an dem der dump oder die sql Datei vorhanden ist, verwenden Sie den oben angegebenen relativen Pfad.




Ich denke, es ist erwähnenswert, dass Sie eine gezippte (komprimierte) Datei mit zcat wie unten gezeigt:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name



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

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

Ersetzen Sie xampp durch mamp oder andere Webserver.




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

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

Um auch alle Datenbanken -all-databases , verwenden Sie die Option -all-databases , und der Name einer Datenbank muss nicht mehr angegeben werden.

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

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




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

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

Ich denke, dass dies in unserem Kontext nützlich sein wird

[~]$ 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 keine Fortschrittsanzeige haben. Verwenden Sie Pipe Viewer und sehen Sie die Datenübertragung durch die Pipe

Für Mac, brew install pv Für Debian / Ubuntu, apt-get install pv . Andere finden Sie unter http://www.ivarch.com/programs/pv.shtml

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



Ich habe immer wieder auf das Problem hingewiesen, bei dem die Datenbank nicht erstellt wurde.

Ich habe es so gemacht

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql



Für Informationen hatte ich nur Standard root + ohne Passwort, es funktionierte nicht mit allen obigen Antworten.

  • Ich habe einen neuen Benutzer mit allen Rechten und einem Passwort erstellt. Es klappt.

  • -ppassword OHNE RAUM.




Fügen Sie die Option --force :

mysql -u username -p database_name --force < file.sql



Unter all den Antworten, für das obige Problem, ist dies das beste:

 mysql> use db_name;
 mysql> source file_name.sql;



Sie müssen den Namen der Datenbank in der Befehlszeile nicht angeben, wenn die .sql-Datei CREATE DATABASE IF NOT EXISTS db_name und USE db_name .

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




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

mysql -u datenbankbenutzer -p <datenbankdatei.sql

heute ist es üblich, dass Datenbanken und Tabellen utf8-Kollation haben, wo dieser Befehl nicht ausreicht. Mit utf8-Kollation in den exportierten Tabellen muss dieser Befehl verwendet werden:

mysql -u Datenbankbenutzer -p --default-character-set = utf8 <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

Ein Kommentar erwähnt auch, 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 nie in einem getrennten Schritt erstellt werden, was beim Import sogar zu einem Fehler führen könnte. Beim Import ist es ratsam, zuerst in der Datei nachzusehen, welche Befehle dort enthalten sind, beim Export ist es ratsam, die Einstellungen zu beachten, besonders 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 erwähnten Links beziehen sich auf MySQL Version 5.7.




Ich verwende Windows 10 mit PowerShell 5 und ich fand fast alle "Unix-like" -Lösungen, die nicht für mich arbeiten.

> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+                               ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

Ich benutze diesen Befehl.

> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]

und es funktioniert perfekt, hoffentlich hilft es.

Danke an @ Casulas answer übrigens.




  1. Öffnen Sie die MySQL-Befehlszeile
  2. Geben Sie den Pfad Ihres mysql bin-Verzeichnisses ein und drücken Sie die Eingabetaste
  3. Fügen Sie Ihre SQL-Datei in den Ordner bin 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.sql und Enter ein
  7. Ihre SQL-Datei wurde erfolgreich hochgeladen.



Verwenden Sie den folgenden Befehl, um eine Datenbank in eine SQL-Datei auszugeben

mysqldump -u username -p database_name > database_name.sql

So importieren Sie eine SQL-Datei in eine Datenbank (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



Related