Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterstützt mysqldump einen Fortschrittsbalken?

Installieren und verwenden Sie pv (es ist als Yum-Paket für CentOS verfügbar)

http://www.ivarch.com/programs/pv.shtml

Unter der Annahme, dass die erwartete Größe der resultierenden dumpfile.sql-Datei 100 MB (100 Megabyte) beträgt, ist die Verwendung von pv wäre wie folgt:

mysqldump <parameters> | pv --progress --size 100m > dumpfile.sql

Die Konsolenausgabe sieht folgendermaßen aus:

[===> ] 20%

Sehen Sie sich die Manpage man pv an für weitere Optionen. Sie können die Übertragungsrate anzeigen, oder wie viel Zeit verstrichen ist, oder wie viele Bytes übertragen wurden und mehr.

Wenn Sie die Größe Ihrer Dump-Datei nicht kennen, gibt es eine Möglichkeit, die Größe der MySQL-Datenbank aus dem Tabellenschema abzurufen – es wird nicht die Größe Ihrer Dump-Datei sein, aber sie könnte für Ihre Bedürfnisse nahe genug sein:

SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;

Aktualisieren

Meiner Erfahrung nach liegt beim Dumping des gesamten MySQL-Servers die tatsächliche unkomprimierte Größe des mysql-Dumps (unter Verwendung der Option mysqldump --hex-blob) ungefähr zwischen 75 % und 85 % der Live-Größe der MySQL-Daten, die aus information_schema abgerufen werden. Für eine allgemeine Lösung könnte ich also Folgendes versuchen:

SIZE_BYTES=$(mysql --skip-column-names <parameters> <<< 'SELECT ROUND(SUM(data_length) * 0.8) AS "size_bytes" FROM information_schema.TABLES;')

mysqldump <parameters> --hex-blob | pv --progress --size $SIZE_BYTES > dumpfile.sql