時間:2024-02-05 12:47作者:下載吧人氣:28
前文我們聊了下分布式文檔存儲數(shù)據(jù)庫之MongoDB訪問控制,回顧請參考;今天我們來了解下mongodb的備份與恢復(fù)
為什么要備份?
備份的目的是對數(shù)據(jù)做冗余的一種方式,它能夠讓我們在某種情況下保證最少數(shù)據(jù)的丟失;之前我們對mongodb做副本集也是對數(shù)據(jù)做冗余,但是這種在副本集上做數(shù)據(jù)冗余僅僅是針對系統(tǒng)故障或服務(wù)異常等一些非人為的故障發(fā)生時,保證數(shù)據(jù)服務(wù)的可用性;它不能夠避免人為的誤操作;為了使得數(shù)據(jù)的安全,將數(shù)據(jù)損失降低到最小,我們必須對數(shù)據(jù)庫周期性的做備份;
常用備份方法
提示:上圖主要描述了mongodb數(shù)據(jù)庫上常用備份策略,我們可以邏輯備份,邏輯備份是將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出成語句,通常使用專用工具導(dǎo)出和導(dǎo)入來完成一次備份與恢復(fù);其次我們也可以物理備份,簡單講物理備份就是把數(shù)據(jù)庫文件打包,備份;恢復(fù)時直接將對應(yīng)的數(shù)據(jù)庫文件解壓恢復(fù)即可;另外一種快速物理備份的方式就是給數(shù)據(jù)拍快照,拍快照可以將數(shù)據(jù)保存為當(dāng)前拍快照時的狀態(tài);如果我們要進(jìn)行恢復(fù)直接恢復(fù)快照即可;
mongodb邏輯備份和物理備份比較
提示:從上圖描述可以看出總體上來看物理備份效率和恢復(fù)效率要高于邏輯;物理備份效率高于邏輯備份,其主要原因是邏輯備份是通過數(shù)據(jù)庫接口將數(shù)據(jù)讀取出來,然后保存為對應(yīng)格式的文件,而物理備份只需要將數(shù)據(jù)文件直接打包備份,不需要一條一條的讀取數(shù)據(jù),然后寫入到其他文件,這中間就省去了讀寫過程,所以物理備份效率高;恢復(fù)也是類似的過程,物理恢復(fù)也是省去了讀寫的過程;
mongodb邏輯備份工具
在mongodb中使用邏輯備份的工具有兩組,第一組是mongodump/mongorestore,使用mongodump/mongorestore這組工具來邏輯的備份數(shù)據(jù),它備份出來的數(shù)據(jù)是BSON格式,BSON是一種二進(jìn)制格式,通常無法使用文本編輯器直接打開查看其內(nèi)容,對人類的可讀性較差,但它的優(yōu)點(diǎn)是保存的文件體積要小;使用這組命令導(dǎo)出的數(shù)據(jù),在恢復(fù)是依賴mongodb版本,不同版本導(dǎo)出的BSON格式略有不同,所以恢復(fù)時,可能存在版本不同而導(dǎo)致恢復(fù)數(shù)據(jù)失敗的情況;另外一組是mongoexport/mongoimport,這組工具導(dǎo)出的數(shù)據(jù)是json格式的數(shù)據(jù),通常我們可以使用文本編輯器打開直接查看,對人類的可讀性較好,但體積相對BSON格式的數(shù)據(jù)要大,恢復(fù)時不依賴版本;所以跨版本備份要先查看下對應(yīng)版本的兼容性,如果兼容使用mongodump/mongorestore,不兼容的話建議使用mongoexport/mongoimport;這里需要注意一點(diǎn),JSON格式雖然可讀性很好,也很通用,但是它只是保留了數(shù)據(jù)部分,而沒有保留索引,賬戶等基礎(chǔ)信息,在使用是應(yīng)該注意;
使用mongodump備份數(shù)據(jù)
插入數(shù)據(jù)
> use testdb
switched to db testdb
> for(i=1;i<=1000;i++) db.test.insert({id:i,name:”test”+i,age:(i%120),classes:(i%25)})
WriteResult({ “nInserted” : 1 })
> show tables
test
> db.test.findOne()
{
“_id” : ObjectId(“5fb130da012870b3c8e3c4ad”),
“id” : 1,
“name” : “test1”,
“age” : 1,
“classes” : 1
}
> db.test.count()
1000
>
網(wǎng)友評論