mongodb副本集備份時需要oplog嗎?
阿新 • • 發佈:2019-01-03
作為一個合格的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掛起)。
具體怎麼備份,我會進行彙總,然後分享給大家。