MongoDB 如何實現備份壓縮

2021-08-27 14:17:04 字數 2451 閱讀 8189

資料庫的備份是災難恢復的最後一道屏障,不管什麼型別的資料庫都需要設定資料庫備份,mongodb也不例外。mongodb 3.0 後 ,資料庫可以採用wiredtiger儲存引擎後(3.2 版本預設),在此環境下通過mongodump 備份後,產生的備份檔案要遠大於資料儲存檔案的大小。此外,一般mongodb儲存的資料量比較大,備份檔案也比較大,占用了很多磁碟空間。所以,研究如何實現mongodb備份壓縮很有必要。

上圖是執行命令 db.stats() 檢視某資料庫的資訊。

備份檔案的大小一般為datasize的大小,所以我們希望壓縮備份,可以達到storagesize 或者更小。

一般的備份思路是先備份,後對備份檔案進行壓縮。之前,我們採用的就是這種方式,例如主要壓縮命令如下

tar -cf - ta

rget

path

/ tar

getp

ath/

| pigz -p 10 > ta

rget

path

/ tar

getp

ath/

.tgz

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

但是這種方式,生成備份檔案的過程中還是容易形成磁碟效能壓力和空間壓力。下圖為我們某台server 採用先備份後壓縮方式,形成的磁碟可用空間變化。

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

壓縮可用於目錄以及歸檔模型下建立的備份,壓縮還可以減少磁碟空間使用。

測試環境:

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 [email protected]:/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%)。

mongodb 備份壓縮 mongodb備份與恢復

mongodb是目前最流行的nosql資料庫,其自身也提供了備份與恢復命令 具體程式為mongodump和mongorestore 一 mongodump備份 mongodump的具體用法可以檢視幫助 error required parameter is missing in host expor...

MongoDB指令碼備份

shell指令碼直接採用mongodump進行備份,直接上 bin bash sourcepath usr bin destpath mongoback nowtime date y m d databasename hello collectionname world username test ...

mongodb備份恢復

參考 其中我在恢復的時候,寫成 mongorestore h 目標ip 目標埠 d index center drop c program files mongodb server 4.0 bin dump index center 命令是在mongodb安裝目錄下bin資料夾下執行的,上面語句紅色...