有没有办法让mysqldump进度条显示用户的备份状态?

我想知道是否有任何方法可以确定,而mysqldump正在运行,有多less备份已完成或剩余多less?

我想为我的用户提供一个控制台进度条来显示他们的备份状态…

顺便说一下,我想用c ++编写上面的程序,这个平台就是linux。 谢谢!

是的,2010年3月27日发布了一个补丁 :

这个新的补丁有一个额外的参数–show-progress-size,默认情况下它被设置为10,000。 因此,当使用–verbose时,每10,000行将获得一个特定表转储的行数的常规状态输出。

所以检查你的版本,如果需要更新和享受。

安装和使用pv (它可以作为CentOS的yum软件包)

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

PV(“pipe道查看器”)是一个通过pipe道监视数据进度的工具。 它可以插入到两个进程之间的任何正常pipe道中,以便直观地显示数据通过的速度,所花费的时间,完成的时间以及完成之前的估计时间。

假设生成的dumpfile.sql文件的期望大小是100m(100兆字节),则使用pv如下所示:

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

控制台输出将如下所示:

[===> ] 20%

看看man page man pv的更多选项。 您可以显示传输速率,已经过了多less时间,传输了多less字节等等。

如果您不知道转储文件的大小,可以从table_schema中获取MySQL数据库的大小 – 它不会是转储文件的大小,但可能足够满足您的需求:

 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; 

罗素E Glaue答案的完整版本。 获取四舍五入的数据库大小为pv只接受整数,并计算数据长度没有索引,每@mtoloo评论:

 db_size=$(mysql -h"$DB_HOST" \ -u"$DB_USERNAME" \ -p"$DB_PASSWORD" \ --silent \ --skip-column-names \ -e "SELECT ROUND(SUM(data_length) / 1024 / 1024, 0) \ FROM information_schema.TABLES \ WHERE table_schema='$DB_NAME';") 

创build时间戳文件的备份:

 mysqldump -h"$DB_HOST" \ -u"$DB_USERNAME" \ -p"$DB_PASSWORD" \ --single-transaction \ --order-by-primary \ --compress \ $DB_NAME | pv --progress --size "$db_size"m > "$(date +%Y%m%d)"_backup.sql