Wie importiere ich einfach mehrere SQL-Dateien in eine MySQL-Datenbank?

72

Ich habe mehrere sqlDateien und möchte alle gleichzeitig in eine MySQL-Datenbank importieren .

Ich gehe zu PHPMyAdmin, greife auf die Datenbank zu, klicke import, wähle eine Datei aus und importiere sie. Wenn ich mehr als ein paar Dateien habe, dauert es lange.

Ich würde gerne wissen, ob es eine bessere Möglichkeit gibt, mehrere Dateien zu importieren, etwa eine Datei, die die anderen Dateien importiert, oder ähnliches.

Ich verwende WAMPund möchte eine Lösung, bei der keine zusätzlichen Programme auf meinem Computer installiert werden müssen .

Chococroc
quelle
Mit einem Skript können Sie dies tun, aber Sie müssen es lernen. Sie könnten etwas in PHP selbst oder einer anderen Skriptsprache wie Ruby oder Python schreiben. Sie könnten es vielleicht sogar in einer Batch-Datei tun.
Toby Allen

Antworten:

138

In Windows - , öffnen Sie ein Terminal, gehen Sie auf den Inhaltsordner und schreiben:

copy /b *.sql all_files.sql

Dadurch werden alle Dateien in nur einer zusammengefasst, sodass der Import mit PhpMyAdmin sehr schnell erfolgt.

Unter Linux und MacOS reicht dies aus , wie @BlackCharly hervorhob:

cat *.sql  > .all_files.sql

Wichtiger Hinweis : Die direkte Ausführung sollte gut funktionieren, kann jedoch dazu führen, dass Sie in einer Schleife stecken bleiben und eine massive Ausgabedatei immer größer wird, da das System die Datei zu sich selbst hinzufügt. Um dies zu vermeiden, gibt es zwei mögliche Lösungen.

A) Legen Sie das Ergebnis sicherheitshalber in einem separaten Verzeichnis ab (Danke @mosh):

mkdir concatSql
cat *.sql  > ./concatSql/all_files.sql

B) Konzentrieren Sie sie in eine Datei mit einer anderen Erweiterung und ändern Sie dann den Namen. (Danke @William Turrell)

cat *.sql  > all_files.sql1
mv all_files.sql1 all_files.sql
Chococroc
quelle
2
Was ist mit unterschiedlicher Tabellencodierung?
Alexufo
@Alexufo, was meinst du?
Chococroc
SQL-Dump-Dateien können unterschiedliche Codierungen haben. Was wird nach dem Zusammenführen von cp1251 und utf 8 in einer Datei sein?
Alexufo
Wenn all_files.sql bereits vorhanden ist, kann dies zu einer rekursiven Kopie der Datei auf sich selbst ohne Ende führen! Legen Sie das Ergebnis sicherheitshalber in einem separaten Verzeichnis ab.
Mosh
kam nach einem halben Jahrzehnt zu Windows und war so verloren, rund 100 Tabellen zu importieren. Du hast gerade am Tag gemacht. <b> Danke </ b>
Crafter
60

Dies ist der einfachste Weg, den ich gefunden habe.

In Windows (Powershell):

cat *.sql | C:\wamp64\bin\mysql\mysql5.7.21\bin\mysql.exe -u user -p database

Sie müssen den Pfad zu Ihrem WAMP - MySQLobigen Pfad einfügen. Ich habe meinen Systempfad verwendet.

Unter Linux (Bash):

cat *.sql | mysql -u user -p database

StanleyD
quelle
Es kann hilfreich sein, den Pfad zu mysql.exe in Ihren Windows-Systempfad einzufügen. Auf diese Weise ist der Befehl für Linux und Windows funktional identisch.
TolMera
In schlimmen Fällen kann dies zu Problemen mit dem Zeichensatz führen, oder irre ich mich? Wenn der catBefehl fehlerhafte utf-8-Zeichen ausgibt, werden diese in Ihren mysql-Befehl geleitet, oder?!
Suther
@suther Ja, du hast recht. In der Zeile, in der die Stückliste der nächsten UTF-8-codierten Datei angezeigt wird, wird ein Fehler angezeigt. ("FEHLER 1064 (42000) in Zeile nnn: Sie haben einen Fehler in Ihrer SQL-Syntax")
Dummkopf
12
  1. Gehe zu cmd

  2. Geben Sie die Eingabeaufforderung C: \ Benutzer \ Benutzername> cd [Ordnerpfad für SQL-Tabellen] ein. Drücken Sie die
    Eingabetaste. Beispiel
    : C: \ Benutzer \ Benutzername> CD E: \ Projekt \ Datenbank


  3. Geben Sie die Eingabeaufforderung C: \ Benutzer \ Benutzername> [Laufwerksname (Verzeichnisname) des SQL-Ordners] ein. Drücken Sie die
    Eingabetaste. Beispiel
    : C: \ Benutzer \ Benutzername> E:

  4. Geben Sie die Eingabeaufforderung ein, um alle SQL-Dateien (Tabellen) in einer einzigen Datei zu
    kopieren. Copy / b * .sql newdatabase.sql Drücken Sie die
    Eingabetaste
    EX: E: \ project \ database> copy / b * .sql newdatabase.sql

  5. Sie können mehrere SQL-Tabellen (Datei-Tabellen) in einer einzigen Datei in Ihrem Verzeichnisordner zusammenführen. Beispiel
    : E: \ project \ database

PHP Kishan
quelle
7

Ich weiß, dass es etwas mehr als zwei Jahre her ist ... aber ich suchte nach einer Möglichkeit, dies zu tun, und war mit der veröffentlichten Lösung nicht besonders zufrieden (es funktioniert einwandfrei, aber ich wollte ein wenig mehr Informationen, wenn der Import stattfindet). . Wenn Sie alle SQL-Dateien zu einer kombinieren, erhalten Sie keine Fortschrittsaktualisierungen.

Also suchte ich weiter nach einer Antwort und dachte, dies könnte ein guter Ort sein, um zu posten, was ich für zukünftige Leute gefunden habe, die nach der gleichen Antwort suchen. Hier ist eine Befehlszeile in Windows, die mehrere SQL-Dateien aus einem Ordner importiert. Sie führen dies über die Befehlszeile aus, während Sie sich in dem Verzeichnis befinden, in dem sich mysql.exe befindet.

for /f %f in ('dir /b <dir>\<mask>') do mysql --user=<user> --password=<password> <dbname> < <dir>\%f

Mit einigen angenommenen Werten (als Beispiel):

for /f %f in ('dir /b c:\sqlbackup\*.sql') do mysql --user=mylogin --password=mypass mydb < c:\sqlbackup\%f

Wenn Sie zwei Sätze von SQL-Sicherungen im Ordner hatten, können Sie die * .sql in eine spezifischere ändern (z. B. mydb _ *. Sql).

DragonYen
quelle
Dies ist eine großartige Lösung. Ich gebe weitere Informationen ein. Falls der Name Ihres Ordners leer ist, fügen wir doppelte Anführungszeichen hinzu. Beispiel: Für / f% f in ('dir / b "C: \ Bitbucket \ db \ Aron \ 9. März \ turl_trevin \" *. Sql') mache mysql --user = root --password = root test <"C. : \ Bitbucket \ db \ Aron \ 9. März \ turl_trevin "\% f
Dylan B
4

Geben Sie die MySQL-Shell wie folgt ein.

mysql --host = localhost --user = username --password --database = db

Verwenden Sie dann den Befehl source und ein Semikolon, um die Befehle zu trennen.

Quelldatei1.sql; Quelldatei2; Quelldatei3;

Markus Zeller
quelle
Nicht einfach, wenn Sie über 40 Tabellen haben und mit dem Datenbankimport arbeiten.
Marcelo Agimóvel
Sie könnten sie alle in einer Datei zusammenfassen und das Problem lösen.
Markus Zeller
3

Schreib einfach:

cat *.sql |mysql -uroot -p

und MySQL importiert die gesamte SQL-Datei nacheinander

Yan
quelle
3

Sie können auch eine for-Schleife verwenden, um dies zu tun:

#!/bin/bash
for i in *.sql
do
    echo "Importing: $i"
    mysql your_db_name < $i
    wait
done 

Quelle

Bobby Iliev
quelle
2

Speichern Sie diese Datei als .bat und führen Sie sie aus. Ändern Sie die Variablen in Klammern ...

@echo off
title Mysql Import Script
cd (Folder Name)
 for %%a in (*) do (
     echo Importing File  : %%a 
     mysql -u(username) -p(password)  %%~na < %%a
)
pause

Wenn es sich nur um eine Datenbank handelt, ändern Sie (%% ~ na) mit dem Datenbanknamen.

Tarek
quelle
1
Nett! Aber was ist, wenn es kein Passwort gibt? Wie eine lokale Datenbank, die für Tests importiert ... habe ich -p () und -p ('') ohne Erfolg ausprobiert.
Marcelo Agimóvel
Ich habe es so verstanden, aber immer die Eingabetaste gedrückt, um kein Passwort mitzuteilen: @echo off title MySQL-Importskript für %% a in (*) do (Echo-Importdatei: %% a C: \ xampp \ mysql \ bin \ mysql .exe -u root -p MYDB <%% a) Pause
Marcelo Agimóvel
1

Die einfachste Lösung besteht darin, alle SQL-Dateien in eine zu kopieren / einzufügen.

Sie können kein SQL-Markup für den Dateiimport hinzufügen (die importierten Dateien befinden sich auf Ihrem Computer und nicht auf dem Server, und ich glaube nicht, dass MySQL ein Import-Markup für externe SQL-Dateien verwaltet).

BlackCharly
quelle
2
Ja, es ist eine einfache Lösung und ich wusste es, aber ich wollte es nicht tun, weil ich die Dateien getrennt halten muss: Jede Datei ist ein Teil meines Systems, und wenn ich nach dem Codieren vielleicht drei Teile ändern möchte ein bisschen möchte ich sie ohne Kopieren und Einfügen importieren. Wie auch immer, eine Lösung, wenn es keinen besseren Weg gibt, danke
Chococroc
Eine einfache Möglichkeit besteht darin, ein Skript zu erstellen, das alle SQL-Dateien enthält (z. B. unter catLinux oder Unix)
BlackCharly,
Ist nicht einfach. Abhängig von der Tischgröße können Probleme auftreten.
Marcelo Agimóvel
0

Geben Sie einfach den folgenden Befehl in Ihre Eingabeaufforderung ein und es werden alle SQL-Dateien in eine einzige SQL-Datei gebunden.

c:/xampp/mysql/bin/sql/ type *.sql > OneFile.sql;
Ajay Singh
quelle
0

Öffnen Sie in Windows Windows Powershell und wechseln Sie in den Ordner, in dem SQL-Dateien ausgeführt werden. Führen Sie dann diesen Befehl aus

cat *.sql |  C:\xampp\mysql\bin\mysql.exe -u username -p databasename
Seshu Noolu
quelle