簡單的replica set 模式的集群,可以直接使用全量物理備份+oplog持續增量備份的策略。
條件:
- 為了不影響mongodb的正常服務,在集群中添加hidden結點。該結點會自動同步mongodb的數據,參與選舉,但是並不對外提供服務。
- 查看oplog的承載時間,時長一定要cover全量備份的時間
- lock hidden/sacondary結點(可選操作)
=>db.fsynclock()
- dump data文件
tar czvf data.tar.gz /data rsync -av testdb.tar.gz mongo-server-new01:/data/
##使用aws創建快照
mongodump --oplog - dump oplog庫,作為計划任務持續拉取
mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin -d local -c oplog.rs -o /data/backup/oplog
- unlock hidden結點(可選操作)
=>db.fsyncUnclock()
數據恢復
- 恢復數據
mongorestore --oplogReplay
- 增量恢復
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備份與恢復
- 禁用balancer,connect to mongos
=>user config =>sh.stopBalancer()
- lock replica set secondary member
=>db.fsyncLock()
- lock config secondary server
=>db.fsynclock()
- dump config server
mongodump --oplog
- unlock secondary member
=>db.fsyncUnclock()
- dump replica set secondary member
mongodump --oplog
- unlock config secondary server
=>db.fsyncUnlock()
- 開啟balancer
=>sh.setbalancerState(true)
restore
- 搭建集群,保持主機名一致,並關閉mongos
- restore shard data
mongorestore --drop --oplogReplay /data/backup/shardA
- restore config data
mongorestore --drop --oplogReplay /data/dump/configData
- 重啟所有結點,驗證集群可用性
=>db.printShardingStatus() =>show collections
