2011-01-31 52 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 
相關問題