mongodb幾種備份恢復方式比較
總覽
MongoDB server 提供了兩種備份恢復的方法:一種是通過拷貝底層數(shù)據(jù)文件進行備份(這種方法又細化為兩個不同的操作模式:1.文件快照 2.cp or rsync 等類似的文件傳輸復制工具)。第二種是通過mongodb 的備份恢復工具mongodump,mongorestore進行對應的備份恢復操作。兩種方法有各種的優(yōu)缺點和適應的應用場景,下面詳細進行對比分析。
1.通過文件快照(Filesystem Snapshots)進行備份和恢復
概述
文件快照備份依賴mongodb宿主機器的操作系統(tǒng)(linux 的LVM特性),它使用操作系統(tǒng)級別的工具對mongodb數(shù)據(jù)文件所在的設備進行拷貝備份,由于這種方法使用的是操作系統(tǒng)級別的工具,因此拷貝備份效率高并且可靠性也高,同時也決定了它的一個缺點:需要宿主環(huán)境的支持。
操作步驟(linux LVM)
·? ?? ???創(chuàng)建快照:lvcreate --size 100M --snapshot --name mdb-snap01 /dev/vg0/mongodb
·? ?? ???歸檔快照:umount/dev/vg0/mdb-snap01; dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
·? ?? ???恢復快照:lvcreate--size 1G --name mdb-new vg0;gzip -d -c mdb-snap01.gz | ddof=/dev/vg0/mdb-new;mount /dev/vg0/mdb-new /srv/mongodb
操作步驟(未開啟日志功能或日志文件和數(shù)據(jù)文件不在同一個卷)
·? ?? ???刷新寫操作到硬盤并鎖住數(shù)據(jù)庫:db.fsyncLock()
·? ?? ???創(chuàng)建快照
·? ?? ???快照完成后,解鎖數(shù)據(jù)庫:db.fsyncUnlock()
優(yōu)點
·? ?? ???支持時間點的快照備份(point-in-time snapshots)
·? ?? ???更高的效率和可靠性
·? ?? ???在滿足一定條件下能夠獲取分片集群的一致性快照備份
·? ?? ???提供增量備份
缺點
·? ?? ???需要文件系統(tǒng)支持時間點快照(linux:the Logical Volume Manager LVM)
·? ?? ???需要開啟日志功能(journalingenabled)并且日志文件和數(shù)據(jù)文件位于同一個文件卷上(3.2 WiredTiger 數(shù)據(jù)文件和日志文件可以位于不同的文件卷),否則無法保證快照有效性和一致性
·? ?? ???為獲取分片集群的一致快照,需要關閉集群均衡器并在大致相同的時刻從集群的每個分片和配置服務器上抓取快照
·? ?? ???沒有開啟日志功能時,備份前需要將寫落地硬盤,備份中停止任何寫操作(MMAPv1)
·? ?? ???MMAPv1通過日志功能在快照時無需停止寫達到一致狀態(tài), WiredTiger通過thelast checkpoint 達到一致狀態(tài)(Checkpoints 每2G數(shù)據(jù)或每分鐘)
·? ?? ???快照創(chuàng)建整個磁盤的鏡像,因此將數(shù)據(jù)文件,配置,日志放在一個邏輯磁盤上節(jié)約空間
版本特性
·? ?? ???MongoDB 3.2以上的WiredTiger引擎支持卷級備份,也就是說日志文件(journal files)和數(shù)據(jù)文件位于不同的磁盤卷上,而3.2以前版本的WiredTiger引擎如果要支持卷級備份,日志文件和數(shù)據(jù)文件必須在同一個卷上(只要開啟日志就無需刷新硬盤并停寫進行備份)
2.通過cp?或rsync?備份和恢復
概述
利用cp 或者rsync 等類似的文件復制同步工具對mongodb 的數(shù)據(jù)庫文件進行拷貝備份
優(yōu)點
·? ?? ???無需文件系統(tǒng)支持快照功能
缺點
·? ?? ???備份拷貝前必須停止所有的對mongod的寫操作,否則將是一個無效的備份
·? ?? ???不支持副本集時間點級(point in time recovery)恢復,并且很難管理大型分片集群
·? ?? ???備份文件占有更多的空間(包括索引以及重復的底層文件填充和碎片)
操作步驟
·? ?? ???執(zhí)行對應的文件傳輸工具命令直接拷貝數(shù)據(jù)文件
3.通過mongodump/mongorestore工具進行備份和恢復
概述
在運行的mongod程序上,mongodump從MongoDB數(shù)據(jù)庫中讀取數(shù)據(jù)生產(chǎn)一個高質(zhì)量的BSON格式文件,mongorestore則可以將其還原為MongoDB數(shù)據(jù)庫。
優(yōu)點
·? ?? ???備份恢復小型mongoDB集群更簡單和效率,備份文件占有的空間更少(只備份文檔,不備份索引)
·? ?? ???備份過程中應用可以繼續(xù)修改數(shù)據(jù)(記錄oplog,通過--oplog選項達到數(shù)據(jù)狀態(tài)一致)
缺點
·? ?? ???備份的數(shù)據(jù)庫中不包含local數(shù)據(jù)庫,只備份數(shù)據(jù)庫的文檔不備份數(shù)據(jù)庫索引,因此恢復后必須重建索引
·? ?? ???備份恢復大型mogoDB集群不理想(效率不高)
·? ?? ???備份時會影響運行中的mongod的性能(產(chǎn)生網(wǎng)絡流量)
·? ?? ???備份的數(shù)據(jù)比系統(tǒng)內(nèi)存大時,查詢操作會引起頁錯誤
·? ?? ???必須擁有對應的訪問控制權(quán)限(執(zhí)行find操作的權(quán)限,內(nèi)建的backup角色擁有備份的權(quán)限)
·? ?? ???mongodump不同版本的格式不能兼容,不要使用新版本的mongodump備份老版本的數(shù)據(jù)
操作步驟
·? ?? ???備份:mongodump--host mongodb.example.net --port 27017 --collection myCollection --db test--out /data/backup/(會覆蓋備份目錄中的文件)
·? ?? ???恢復:mongorestore--port --oplogReplay
4.總結(jié)
Snapshot備份時由于是對整個磁盤卷進行快照,為了減少不必要的數(shù)據(jù)的備份,需要預先將mongodb的數(shù)據(jù),日志等放在一個單獨的磁盤卷上。而mongodump備份時只備份數(shù)據(jù)文檔,不備份索引,恢復后需要重建。但mongodump可以備份指定的數(shù)據(jù)庫和集合,備份數(shù)據(jù)更靈活些,但備份的時候會對運行的mongodb產(chǎn)生性能影響。兩者對分片集群備份,要產(chǎn)生同一時間點的一致備份,都需要在備份期間停止應用程序?qū)ongodb的寫操作,否則兩者對分片集群的備份只能達到近似的同一時間點備份(approximately the same moment in time)。?兩者在做恢復的時候都需要對集群進行一段時間的停機操作維護。
數(shù)據(jù)庫 MongoDB
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。