MongoDB實(shí)現(xiàn)備份壓縮的方法教程
背景及原理
數(shù)據(jù)庫(kù)的備份是災(zāi)難恢復(fù)的最后一道屏障,不管什么類(lèi)型的數(shù)據(jù)庫(kù)都需要設(shè)置數(shù)據(jù)庫(kù)備份,MongoDB也不例外。MongoDB 3.0 后 ,數(shù)據(jù)庫(kù)可以采用Wiredtiger存儲(chǔ)引擎后(3.2 版本默認(rèn)),在此環(huán)境下通過(guò)mongodump 備份后,產(chǎn)生的備份文件要遠(yuǎn)大于數(shù)據(jù)存儲(chǔ)文件的大小。此外,一般MongoDB存儲(chǔ)的數(shù)據(jù)量比較大,備份文件也比較大,占用了很多磁盤(pán)空間。所以,研究如何實(shí)現(xiàn)MongoDB備份壓縮很有必要。
上圖是執(zhí)行命令 db.stats()
查看某數(shù)據(jù)庫(kù)的信息。
備份文件的大小一般為dataSize的大小,所以我們希望壓縮備份,可以達(dá)到storageSize 或者更小。
一般的備份思路是先備份,后對(duì)備份文件進(jìn)行壓縮。之前,我們采用的就是這種方式,例如主要壓縮命令如下
tar -cf - ${targetpath}/${nowtime} | pigz -p 10 > ${targetpath}/${nowtime}.tgz
(命令解釋?zhuān)?targetpath}/${nowtime
為待壓縮的備份文件;pigz 是Linux壓縮神器,可并行壓縮;-p是指定cpu的核數(shù)。)
但是這種方式,生成備份文件的過(guò)程中還是容易形成磁盤(pán)性能壓力和空間壓力。下圖為我們某臺(tái)Server 采用先備份后壓縮方式,形成的磁盤(pán)可用空間變化。
真正希望的是在備份的同時(shí)進(jìn)行壓縮,這樣可用空間就比較平穩(wěn)了。在MongoDB 3.2 中 引入了一種壓縮式備份【此mongodb版本必須不低于3.2】??梢允褂胓zip進(jìn)行壓縮。這是通過(guò)在mongodump和mongorestore中引入一個(gè)新的指令行選項(xiàng)“- -gzip”實(shí)現(xiàn)的。
壓縮可用于目錄以及歸檔模型下創(chuàng)建的備份,壓縮還可以減少磁盤(pán)空間使用。
測(cè)試
測(cè)試環(huán)境:
測(cè)試服務(wù)器 |
測(cè)試數(shù)據(jù)庫(kù) |
端口 |
文件路徑 |
172.X.X.245 |
實(shí)例全備 |
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
這時(shí)候,查看備份文件的格式都變成了.gz的格式
Step 2 將備份文件copy至遠(yuǎn)程機(jī)器上,進(jìn)行還原:
以下命令是將在172.X.X.246,要求是將文件從X.245 copy至本地
scp -r root@172.X.X.245:/data/mongodb_back/QQ_DingDing
step 3 執(zhí)行還原的命令
執(zhí)行的命令
./mongorestore --host 172.X.X.246 --port 17218 -d QQ_DingDing -u 用戶名 -p "密碼" --gzip --authenticationDatabase "admin" /data/mongodb_back/QQ_DingDing
還原后登錄MongoDB,執(zhí)行show dbs,查看此時(shí) 數(shù)據(jù)大小為500M。
補(bǔ)充說(shuō)明
(1) 如果不采用壓縮式的備份,備份后的文件會(huì)是多大呢?備份命令 :
./mongodump --host 172.X.X.245 --port 17219 -u 用戶名 -p "密碼" --authenticationDatabase "admin" --out /data/mongodb_back2
查看此種方法備份后的文件大小--1.5G。
以此QQ_DingDing數(shù)據(jù)庫(kù)為例,其壓縮率為(文件壓縮后的大小與壓縮前的大小之比):97M/1.5G=97/1536=6.3%
(2) 這種壓縮備份的方式的會(huì)不會(huì)帶來(lái)一些弊端:例如備份時(shí)間增長(zhǎng)?(恢復(fù)時(shí)間增加?,請(qǐng)自測(cè)一下試試,嘻嘻 @@@)
以 某歸檔備份庫(kù)所在實(shí)例為例(storageSize 150G,dataSize 600G )
采用 先備份后壓縮的方式耗時(shí)1小時(shí)55分鐘
采用壓縮式備份(指定--gzip參數(shù))的方式耗時(shí) 2小時(shí)33分鐘
產(chǎn)生的備份文件大小基本相等,壓縮式備份方式產(chǎn)生的備份文件略小
所以 壓縮式備份會(huì)導(dǎo)致備份時(shí)間增長(zhǎng)。
但從空間使用的角度來(lái)講,我們?nèi)匀唤ㄗh大家使用壓縮式備份,其壓縮比非常高(測(cè)試案例的壓縮比6.3%)。
附:定時(shí)清除,保留7天的紀(jì)錄
#!/bin/bash targetpath='/backup/mongobak' nowtime=$(date -d '-7 days' "+%Y%m%d") if [ -d "${targetpath}/${nowtime}/" ] then rm -rf "${targetpath}/${nowtime}/" echo "=======${targetpath}/${nowtime}/===刪除完畢==" fi echo "===$nowtime ==="
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- mongodb 數(shù)據(jù)庫(kù)操作--備份 還原 導(dǎo)出 導(dǎo)入
- MongoDB整庫(kù)備份與還原以及單個(gè)collection備份、恢復(fù)方法
- MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例
- Windows下自動(dòng)備份MongoDB的批處理腳本
- Mongodb實(shí)現(xiàn)定時(shí)備份與恢復(fù)的方法教程
- Windows或Linux系統(tǒng)中備份和恢復(fù)MongoDB數(shù)據(jù)的教程
- Linux下MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)備份詳解
- 淺談MongoDB的備份方式
- MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程
- MongoDB 導(dǎo)出導(dǎo)入備份恢復(fù)數(shù)據(jù)詳解及實(shí)例
相關(guān)文章
Mongodb過(guò)濾器filter選擇要返回的數(shù)組子集操作方法
Mongodb使用過(guò)濾器 $filter根據(jù)指定條件選擇要返回的數(shù)組子集,這篇文章主要介紹了Mongodb對(duì)嵌套文檔數(shù)組進(jìn)行查詢操作,需要的朋友可以參考下2023-07-07MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作總結(jié)
這篇文章主要介紹了MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作,結(jié)合實(shí)例形式總結(jié)分析了MongoDB數(shù)據(jù)庫(kù)創(chuàng)建、刪除、集合、文檔等基本操作技巧,需要的朋友可以參考下2020-06-06基于Morphia實(shí)現(xiàn)MongoDB按小時(shí)、按天聚合操作方法
這篇文章主要介紹了基于Morphia實(shí)現(xiàn)MongoDB按小時(shí)、按天聚合操作 ,實(shí)現(xiàn)思路是啟動(dòng)定時(shí)任務(wù),對(duì)各用戶的設(shè)備狀態(tài)數(shù)據(jù)分別按照小時(shí)以及天進(jìn)行聚合,并存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中供用戶后續(xù)查詢.需要的朋友可以參考下2019-07-07MongoDB學(xué)習(xí)以及集群搭建的實(shí)踐全紀(jì)錄
這篇文章主要給大家介紹了關(guān)于MongoDB學(xué)習(xí)以及集群搭建的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09MongoDB安裝及接入springboot的詳細(xì)過(guò)程
MongoDB是一個(gè)開(kāi)源、高性能、無(wú)模式(模式自由)的文檔(Bson)型數(shù)據(jù)庫(kù),這篇文章主要介紹了MongoDB安裝及接入springboot,需要的朋友可以參考下2024-05-05Mongodb 3.2.9開(kāi)啟用戶權(quán)限認(rèn)證問(wèn)題的步驟詳解
這篇文章主要給大家介紹了關(guān)于Mongodb 3.2.9開(kāi)啟用戶權(quán)限認(rèn)證問(wèn)題的詳細(xì)步驟,通過(guò)開(kāi)啟權(quán)限認(rèn)證,會(huì)對(duì)大家的Mongodb更加保護(hù)的安全些,文中將步驟介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08