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