2011-01-31 353 views
49

我想知道是否有任何方法可以确定,而mysqldump运行时,备份已完成多少或剩余多少?有没有办法让mysqldump进度条显示用户的备份状态?

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

由我想写出标准的C++上面的程序方式和平台会是Linux操作系统。 谢谢!

回答

39

是,3月27日一patch was committed,2010:

这个新的补丁有--show正在进行的尺寸,其通过 默认设置为10,000一个额外的参数。因此,当使用--verbose时,每10,000行将获得转储的特定表的 的行数的常规状态输出。

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

+0

真棒,还需要一些作弄(得到所有表和他们的行数),但接缝编码的好起点 – mpapis 2011-02-01 10:46:20

+2

我使用的是mysqldump版本10.13的Distrib 5.5.11,用于Win32(x86),它似乎并没有用这个补丁构建。我如何确定这个补丁是否已经成为一个稳定版本? – 2011-05-02 14:31:12

34

安装和使用pv(它可作为yum包为CentOS)

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

PV(“管道查看器”)被用于通过管道监测数据 的进展的工具。它可以插入到两个过程之间的任何正常管道 中,以便直观地显示数据通过的速度有多快,已经用了多长时间,多长时间完成它,以及估计它将持续多长时间完成。

假设所得dumpfile.sql文件的预期大小为100米(100兆字节),使用pv将如下:

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

控制台输出如下:

[===> ] 20%

看看man页面man pv了更多的选择。您可以显示传输速率,或已经过了多长时间,或传输了多少字节等等。

如果您不知道转储文件的大小,有一种方法可以从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; 
4

Russell 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';") 

创建一个备份到时间戳的文件名:

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 
相关问题