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




file source (25)

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?

Answers

Wechseln Sie zu dem Verzeichnis, in dem Sie die ausführbare MySQL-Datei haben. -u für Benutzername und -p zur Eingabe des Passworts:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql

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.


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.


Manchmal kommt es auch auf den definierten Port sowie die Server- IP-Adresse dieser Datenbank an ...

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

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.


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

Für den einfachen Import:

# 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

Die Angabe von Anmeldeinformationen in der Befehlszeile ist keine gute Idee. Die obigen Antworten sind großartig, aber vernachlässigen zu erwähnen

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

Wo etc / myhost.cnf ist eine Datei, die Host, Benutzer, Passwort enthält, und Sie vermeiden, das Passwort in der Befehlszeile offen legen. Hier ist ein Beispiel,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword

mysql --user=[user] --password=[password] [database] < news_ml_all.sql

Wir können diesen Befehl verwenden, um SQL von der Befehlszeile zu importieren:

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

Zum Beispiel, wenn der Benutzername root und das Passwort Passwort ist. Und Sie haben einen Datenbanknamen als bank und die SQL-Datei ist bank.sql . Dann tu das einfach so:

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

Merken Sie sich, wo Ihre SQL-Datei ist. Wenn sich Ihre SQL-Datei im Desktop Ordner / Verzeichnis befindet, gehen 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 Project und Ihre SQL-Datei sich im Desktop Verzeichnis befindet. Wenn Sie aus dem Project darauf zugreifen möchten, können Sie Folgendes tun:

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

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 Datenbankabbilder zu importieren.

mysql -u username -p password < dump.sql

Import in Datenbank: -

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

Aus der Datenbank exportieren: -

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

Nach diesen Befehlen fragt prompt nach Ihrem mysql Passwort


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

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 file.sql .

Hinweis-2: Verwenden Sie -R und --triggers , um die Routinen und Trigger der ursprünglichen Datenbank --triggers . Sie werden standardmäßig nicht kopiert.


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

In Bezug auf die Zeit, die für den Import großer Dateien benötigt wird: Am wichtigsten ist, dass es mehr Zeit in autocommit = true nimmt, da die Standardeinstellung von MySQL autocommit = true . Sie müssen dies vor dem Importieren der Datei deaktivieren und dann prüfen, ob der Import wie ein Edelstein funktioniert.

Sie müssen nur Folgendes tun:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

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;

Zu Sicherungszwecken erstellen Sie eine BAT-Datei und führen Sie diese BAT-Datei mit dem Taskplaner aus . Es wird eine Sicherung der Datenbank benötigt; Kopieren Sie einfach die folgende Zeile und fügen Sie sie im Notepad speichern Sie dann 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

Ähnlich wie https://.com/a/17666285/1888983
Hauptunterschiede für mich:

  1. Die Datenbank muss zuerst existieren
  2. Kein Leerzeichen zwischen -p und dem Passwort
shell> mysql -u root -ppassword #note: no space between -p and password
mysql> CREATE DATABASE databasename;
mysql> using databasename;
mysql> source /path/to/backup.sql

Fedora 26 mit MariaDB laufen.


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

Der folgende Befehl funktioniert für mich von der Befehlszeile (cmd) unter Windows 7 auf WAMP .

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

Importieren Sie eine Datenbank

  1. Gehe zur Fahrt:

    command: d:
    
  2. MySQL-Anmeldung

    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 ein

    \.DbName.sql
    

Fügen Sie die Option --force :

mysql -u username -p database_name --force < file.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.


Eine andere häufig verwendete Option besteht darin, Umgebungsvariablen zu übergeben. In deinem Code liest du sie über ENV['VAR'] und kannst sie direkt vor dem rake Befehl übergeben, wie

$ VAR=foo rake mytask




mysql sql command-line import