MongoDB 如何實現備份壓縮

背景及原理                                         

數據庫的備份是災難恢復的最後一道屏障,無論什麼類型的數據庫都須要設置數據庫備份,MongoDB也不例外。MongoDB 3.0 後 ,數據庫能夠採用Wiredtiger存儲引擎後(3.2 版本默認),在此環境下經過mongodump 備份後,產生的備份文件要遠大於數據存儲文件的大小。此外,通常MongoDB存儲的數據量比較大,備份文件也比較大,佔用了不少磁盤空間。因此,研究如何實現MongoDB備份壓縮頗有必要。mongodb

上圖是執行命令 db.stats() 查看某數據庫的信息。數據庫

備份文件的大小通常爲dataSize的大小,因此咱們但願壓縮備份,能夠達到storageSize 或者更小。服務器

般的備份思路是先備份,後對備份文件進行壓縮。以前,咱們採用的就是這種方式,例如主要壓縮命令以下性能

tar -cf - ${targetpath}/${nowtime} | pigz -p 10 > ${targetpath}/${nowtime}.tgz測試

(命令解釋: targetpath}/${nowtime 爲待壓縮的備份文件;pigz 是Linux壓縮神器,可並行壓縮;-p是指定cpu的核數。)spa

 

可是這種方式,生成備份文件的過程當中仍是容易造成磁盤性能壓力和空間壓力。下圖爲咱們某臺Server 採用先備份後壓縮方式,造成的磁盤可用空間變化。rest

真正但願的是備份的同時進行壓縮,這樣可用空間就比較平穩了。在MongoDB 3.2 中 引入了一種壓縮式備份【此mongodb版本必須不低於3.2】。可使用gzip進行壓縮。這是經過在mongodump和mongorestore中引入一個新的指令行選項「- -gzip」實現的。blog

壓縮可用於目錄以及歸檔模型下建立的備份,壓縮還能夠減小磁盤空間使用。ip

 

測試

測試環境:ci

 

測試服務器

測試數據庫

端口

文件路徑

172.X.X.245

實例全備

17219

/data/mongodb_back

172.X.X.246

QQ_DingDing

17218

/data/mongodb_back/QQ_DingDing

 

 

 

 

 

 

 

Step 1 壓縮式備份的命令:

 

./mongodump --host 172.X.X.245 --port 17219 -u 用戶名 -p "密碼" --gzip --authenticationDatabase "admin" --out /data/mongodb_back 

 

備份後文件的大小,97M

這時候,查看備份文件的格式都變成了.gz的格式

 

Step 2 將備份文件copy至遠程機器上,進行還原:

 

如下命令是將在172.X.X.246,要求是將文件從X.245 copy至本地

scp -r root@172.X.X.245:/data/mongodb_back/QQ_DingDing

 

step 3 執行還原的命令 

 

執行的命令

./mongorestore --host 172.X.X.246 --port 17218 -d QQ_DingDing -u 用戶名 -p "密碼" --gzip --authenticationDatabase "admin" /data/mongodb_back/QQ_DingDing

還原後登陸MongoDB,執行show dbs,查看此時 數據大小爲500M。

補充說明

 

(1)    若是不採用壓縮式的備份,備份後的文件會是多大呢?備份命令 :

./mongodump --host 172.X.X.245 --port 17219 -u 用戶名 -p "密碼" --authenticationDatabase "admin" --out /data/mongodb_back2

查看此種方法備份後的文件大小--1.5G。

以此QQ_DingDing數據庫爲例,其壓縮率爲(文件壓縮後的大小與壓縮前的大小之比):97M/1.5G=97/1536=6.3%

 

(2)   這種壓縮備份的方式的會不會帶來一些弊端:例如備份時間增加?(恢復時間增長?,請自測一下試試,嘻嘻 @@@)

以 某歸檔備份庫所在實例爲例(storageSize 150G,dataSize 600G )

採用 先備份後壓縮的方式耗時1小時55分鐘

 

  採用壓縮式備份(指定--gzip參數)的方式耗時 2小時33分鐘

   

產生的備份文件大小基本相等,壓縮式備份方式產生的備份文件略小

 

因此 壓縮式備份會致使備份時間增加。

 

但從空間使用的角度來說,咱們仍然建議你們使用壓縮式備份,其壓縮比很是高(測試案例的壓縮比6.3%)。

 

本文版權歸做者全部,未經做者贊成不得轉載,謝謝配合!!!

相關文章
相關標籤/搜索