mongoDB備份/恢復策略


 簡單的replica set 模式的集群,可以直接使用全量物理備份+oplog持續增量備份的策略。

條件:

  • 為了不影響mongodb的正常服務,在集群中添加hidden結點。該結點會自動同步mongodb的數據,參與選舉,但是並不對外提供服務。
  • 查看oplog的承載時間,時長一定要cover全量備份的時間
  1. lock  hidden/sacondary結點(可選操作)
    =>db.fsynclock()
  2. dump   data文件
    tar czvf data.tar.gz /data
    rsync -av testdb.tar.gz mongo-server-new01:/data/
    ##使用aws創建快照
    mongodump --oplog
  3. dump oplog庫,作為計划任務持續拉取
    mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin -d local -c oplog.rs -o /data/backup/oplog
  4. unlock hidden結點(可選操作)
    =>db.fsyncUnclock()

 

數據恢復

  1. 恢復數據
    mongorestore --oplogReplay

     

  2. 增量恢復
    bsondump oplog.rs.bson
    
    mongorestore --oplogReplay /data/backup/oplog/oplog.bson

 

從hidden節點備份,每天全量備份一次

mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin --oplog -o /data/backup/fullMongo

500M:1min

持續拉取oplog增量備份

mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin -d local -c oplog.rs -o /data/backup/oplog

4G:3min

定期巡檢備份有效性

cp -f /data/backup/oplog/oplog.rs.bson   /data/backup/fullMongo/oplog.bson

mongorestore -h mongotest -uroot -proot --authenticationDatabase --oplogReplay /data/backup/fullMongo

數據恢復

 

 

 

各種角色權限對應如下:

hidden節點配置

rs.stepDown()

添加hidden節點

PRIMARY>rs.add({host:"192.168.0.1:27017",priority:0,hidden:true})

#設置為0,永遠不會成為主節點

PRIMARY>rs.reconfig(config)

PRIMARY>rs.status();

 

全量備份dump的是全部的數據庫?

不是的,local並不會dump下來,里面存儲了集群信息。dump的是數據和帳號信息

 

 

為什么是每天一次

=>rs.printReplicationInfo()

configured oplog size: 4366MB

log length start to end :166920secs (46.37hrs)

oplog first event time:Tue May 14 2019 15:18:59 GMT+0800 (CST)

oplog last event time:Thu May 16 2019  13:40:59 GMT+0800 (CST)

now:Thu May 16 2019 13:48:03 GMT+0800 (CST)

 

修改oplog大小,重建oplog.rs

secondary>db.shutdownServer()

mongod --port 27018 --dbpath /srv/mongodb

mongodump --db local --collection 'oplog.rs' --port 27018

secondary>use local

secondary>db

 

什么是oplog

local:oplog.rs

 

sharded cluster備份與恢復

  1. 禁用balancer,connect to mongos
    =>user config
    =>sh.stopBalancer()
  2. lock replica set secondary member
    =>db.fsyncLock()
  3. lock config secondary server
    =>db.fsynclock()
  4. dump config server
    mongodump --oplog
  5. unlock secondary member
    =>db.fsyncUnclock()
  6. dump replica set secondary member
    mongodump --oplog
  7. unlock config secondary server
    =>db.fsyncUnlock()
  8. 開啟balancer
    =>sh.setbalancerState(true)

restore

  1. 搭建集群,保持主機名一致,並關閉mongos
  2. restore shard data
    mongorestore --drop --oplogReplay /data/backup/shardA

     

  3. restore config data
    mongorestore --drop --oplogReplay /data/dump/configData

     

  4. 重啟所有結點,驗證集群可用性
    =>db.printShardingStatus()
    =>show collections

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM