1. 程式人生 > >mongodb副本集備份時需要oplog嗎?

mongodb副本集備份時需要oplog嗎?

作為一個合格的dba((⊙o⊙)…我是菜鳥),備份應該是重中之重,就像‘兵馬未動糧草先行’,完善的備份可以救你一命啊,切記,切記!                                                                 

那麼mongodb副本集備份時到底需要oplog嗎?

1、先看作用:

mongodump --oplog會記錄備份期間對資料的修改到oplog.bson中
這樣mongorestore --oplogReplay會在恢復完資料後重放該oplog.bson
檔案。


2、用--oplog選項的好處:
備份時,使用者還可以向伺服器寫入資料,因此備份過程對使用者透明。
 
3、在分片叢集(每個分片是一個副本集)中為什麼不用--oplog?
(1)為了保證備份的資料是某一時刻的資料。
(2)因為配置伺服器和分片上的資料是單獨備份的,在備份時,
          使用者同時寫入資料的話,可能導致資料不一致:
         如:
              步驟1-全備配置伺服器;(正常完成)
              步驟2-全備分片;
              步驟3-使用者寫入資料;(此時步驟2還在執行)

             結果:配置伺服器沒有記錄使用者寫入的資料,恢復後,這些資料無法通過路由找到,即丟失資料了。

4、如何備份分片叢集:

      自己寫了個工具,沒有用--oplog選項,而是單獨備份oplog.rs集合,同時鎖住了資料庫(一定不要鎖primary,否則此時使用者無法寫入資料,而且如果使用者恰好在備份期間寫入會導致mongodb掛起)。

     具體怎麼備份,我會進行彙總,然後分享給大家吐舌頭