it-swarm.com.de

Importieren einer großen SQL-Datei über die Befehlszeile in MySql

Ich versuche, eine SQL-Datei von etwa 300 MB in MySql über die Befehlszeile in Ubuntu zu importieren. ich benutzte 

source /var/www/myfile.sql;

Im Moment zeigt es scheinbar unendlich viele Reihen von:

Query OK, 1 row affected (0.03 sec)

Es läuft jedoch schon eine Weile. Ich habe bisher noch keine so große Datei importiert, also möchte ich nur wissen, ob dies normal ist. Wenn der Prozess zum Stillstand kommt oder einige Fehler aufweist, wird dies in der Befehlszeile angezeigt oder wird dieser Prozess unbegrenzt fortgesetzt?

Vielen Dank

60
user2028856

Sie können die .sql-Datei mit der Standardeingabe folgendermaßen importieren:

mysql -u <user> -p<password> <dbname> < file.sql

Hinweis: Zwischen <-p> und <password> darf kein Leerzeichen stehen.

Referenz: http://dev.mysql.com/doc/refman/5.0/de/mysql-batch-commands.html

Hinweis zu den vorgeschlagenen Änderungen: Diese Antwort wurde durch die vorgeschlagenen Änderungen zur Verwendung des Inline-Kennwortparameters leicht geändert. Ich kann es für Skripte empfehlen, aber Sie sollten wissen, dass das Kennwort, das Sie direkt in den Parameter (-p<password>) schreiben, von einer Shell-Historie zwischengespeichert werden kann, die Ihr Passwort für alle Benutzer enthält, die die Historiendatei lesen können. Während -p Sie auffordert, das Kennwort per Standardeingabe einzugeben.

111
Martin Nuc

Für die Zeit, die für das Importieren riesiger Dateien benötigt wird, ist es am wichtigsten, dass es mehr Zeit in Anspruch nimmt, weil die Standardeinstellung von mysql "autocommit = true" ist. Sie müssen dies vor dem Importieren der Datei deaktivieren und dann prüfen, wie der Import wie ein Edelstein funktioniert ...

Öffnen Sie zunächst MySQL:

mysql -u root -p

Dann müssen Sie nur noch Folgendes tun:

mysql>use your_db

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

57
Paresh Behede

+1 bis @MartinNuc, Sie können den mysql-Client im Batch-Modus ausführen und sehen dann nicht den langen Stream von "OK" -Zeilen.

Wie lange es dauert, eine bestimmte SQL-Datei zu importieren, hängt von vielen Faktoren ab. Nicht nur die Größe der Datei, sondern auch die Art der Anweisungen, wie stark der Server-Server ist und wie viele andere Dinge gleichzeitig ausgeführt werden. 

@MartinNuc sagt, dass er 4 GB SQL in 4-5 Minuten laden kann, aber ich habe 0,5 GB SQL-Dateien ausgeführt und musste 45 Minuten auf einem kleineren Server haben.

Wir können nicht wirklich raten, wie lange es dauert, Ihr SQL-Skript auf Ihrem Server auszuführen.


Re deinen Kommentar,

@MartinNuc ist korrekt. Sie können festlegen, dass der mysql-Client jede Anweisung druckt. Oder Sie können eine zweite Sitzung öffnen und mysql> SHOW PROCESSLIST ausführen, um zu sehen, was läuft. Wahrscheinlich interessieren Sie sich jedoch mehr für eine "Prozentzahl" oder eine Schätzung, wie lange es dauern wird, um die verbleibenden Aussagen abzuschließen.

Entschuldigung, es gibt keine solche Funktion. Der MySQL-Client weiß nicht, wie lange es dauert, spätere Anweisungen auszuführen, oder wie viele es gibt. Es kann also keine aussagekräftige Einschätzung geben, wie lange es dauern wird.

8
Bill Karwin

Die Lösung, die ich für große SQL-Restore verwende, ist ein mysqldumpsplitter-Skript. Ich teile mein sql.gz in einzelne Tabellen auf. Laden Sie dann etwas wie die MySQL-Workbench und verarbeiten Sie es als Wiederherstellung des gewünschten Schemas. 

Hier ist das Skript https://github.com/kedarvj/mysqldumpsplitter

Und das funktioniert für größere SQL-Wiederherstellungen, mein Durchschnitt auf einer Site, mit der ich arbeite, ist eine 2,5-GB-Datei sql.gz, 20 GB unkomprimiert und ~ 100 GB, sobald sie vollständig wiederhergestellt sind

0

Importieren einer großen SQL-Datei in MySql über die Befehlszeile

  1. erste Downloaddatei.
  2. datei zu Hause einfügen.
  3. verwenden Sie den folgenden Befehl in Ihren Terminals (CMD) 
  4. Syntax: Mysql -u Benutzername -p databusname <file.sql

Beispiel: mysql -u root -p aanew <aanew.sql

0
Shailesh Sharma