Erhalten Sie eine Fortschrittsanzeige beim Importieren von MySQL-Datenbanken

21

Ich importiere oft MySQL-Datenbanken, was eine Weile dauern kann. Es gibt keinerlei Fortschrittsanzeige. Kann man das irgendwie zeigen? Entweder Datensätze importiert, MB importiert oder Tabellen importiert ... alles ist besser als nur zu warten. Jemand eine Idee?

Ich benutze diesen Befehl:

mysql -uuser -p -hhost database < largefile.sql

Die Dateien sind zwischen 40 und 300 MB groß und der Host befindet sich im lokalen Netzwerk.

Setzen Sie Monica wieder ein
quelle
@sr_ Ich denke pvist genau das, wonach der Fragesteller sucht. Ich habe es gerade über rpmforge auf CentOS installiert. Wenn die angegebene Größe -Parameter es sogar eine ETA zeigen.
Nils
pvtat den Trick in der Tat! Wenn jemand darauf eine Antwort geben kann, kann ich das akzeptieren!
Setzen Sie Monica am

Antworten:

31

Es heißt schönes Werkzeug pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

dann kannst du es zB so benutzen

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

Bitte überprüfen Sie UPDATE 2 für meine neueste Version

ps: check this blog http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

UPDATE: Der obige Link scheint nicht zu funktionieren, aber ich habe den gleichen Artikel hier gefunden: http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

UPDATE 2: Noch bessere Lösung mit FULL Fortschrittsbalken. Dazu müssen Sie 2 eingebaute pvOptionen verwenden. Eine davon ist --progressauf Fortschrittsbalken zu zeigen und zweite ist --sizezu sagen , pvwie groß die Gesamtdatei ist.

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

..das Problem ist mit der .gzursprünglichen Dateigröße. Sie müssen die ursprünglichen Dateigrößeninformationen irgendwie entpacken, ohne sie selbst zu entpacken. Andernfalls verlieren Sie wertvolle Zeit, um diese Datei zweimal zu entpacken (zum ersten Mal pvund zum zweiten Mal zcat). Aber zum Glück haben Sie eine gzip -lOption, die unkomprimierte Informationen über unsere gziped-Datei enthält. Leider haben Sie es im Tabellenformat, so dass Sie es extrahieren müssen, bevor Sie es verwenden können. Alles zusammen ist unten zu sehen:

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

Uff .. also das letzte, was Sie tun müssen, ist einfach alles zusammen zu kombinieren.

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

Um es noch schöner zu machen, können Sie Progres NAME so hinzufügen

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

Endergebnis:

Importing.. : [===========================================>] 100%

UPDATE 3: Zur schnellen Verwendung können Sie benutzerdefinierte Funktionen erstellen.

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

Verwendung:

mysql_import dbname /path/to/our/database.sql.gz

Wenn Sie nicht wissen, wo Sie es ablegen sollen, lesen Sie diese Antwort: /unix//a/106606/20056

Sie können Funktionen unter Aliase hinzufügen. So können Sie zB ~/.bash_aliasesDatei verwenden.

sobi3ch
quelle
das ist fantastisch.
Dave
1
Ein pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
Einzeiler
16

Warum so kompliziert?

Das funktioniert gut:

pv dump.sql.gz | zcat | mysql -u user -ppasswd database
Vincent
quelle
Viel einfacher und sauberer!
donquixote
7

Ich importiere immer Datenbanken aus der MySql-Shell. Es bietet keine Fortschrittsanzeige, führt aber (schnell) einen Bildlauf durch die durchgeführten Aktionen durch, damit ich weiß, dass sie funktionieren.

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
George M
quelle