mongodb备份oplog_MongoDB备份和恢复方案

本文详细介绍了MongoDB的备份方法,包括单DB备份、全量+oplog增量备份,以及恢复命令。重点讲解了如何利用oplog进行增量备份和恢复到特定时间点,同时提到了RPO、Secondary延迟备份和恢复的策略。此外,还分享了常见的错误及解决办法,并给出了部署备份脚本的示例。
摘要由CSDN通过智能技术生成

备份方法

Oplog介绍

可用于生产环境的备份与恢复脚本

备份命令

a) 单DB两种方法

(1)mongodump -h localhost:27017 -d db[不能多个] -o /data_dump -u xxx -p xxx --authenticationDatabase ‘admin’

(2)mongodump -h localhost:27017 -d db -o ./data_dump -u xxx -p xxx(具体这个DB的用户)

b) 全量+oplog增量

mongodump -h localhost:27017 -o ./data_dump -u xxx -p xxx --oplog --quiet(隐藏日志)

5.恢复命令

a) 单DB两种方法

(1)mongorestore -h localhost:27017 -d db --dir ./data_dump /db -u xxx -p xxx --authenticationDatabase 'admin'

(2)mongorestore -h localhost:27017 -d db --dir ./data_dump/db -u xxx -p xxx

b) 恢复+oplog回放

mongorestore -h localhost:27017./data_dump -u xxx -p xxx –oplogReplay --quiet(隐藏日志)

6.恢复到指定时间点

导出主节点上的 oplog:

mongodump --host 127.0.0.1 -d local -c oplog.rs

可以通过—query 参数添加时间范围

使用 bsondump 查看导出的 oplog,找到需要截止的时间点:

例如:{ "ts" : Timestamp(1577355175, 1), "t" : NumberLong(23), "h" : NumberLong(0), "v" : 2, "op" : "c","ns" : "foo.$cmd", "ui" : UUID("767b3a2b-a1cd-4db8-a74a-71ce9711f368"), "o2" : { "numRecords" : 1 },"wall" : ISODate("2019-12-26T10:12:55.436Z"), "o" : { "drop" : "employees" } }

恢复到指定时间点

利用--oplogLimit指定恢复到这条记录之前

mongorestore -h 127.0.0.1 --oplogLimit "1577355175:1" --oplogFile dump/local/oplog.rs

7.RPO(RecoveryPointObjective复原点目标,指能容忍的最大数据丢失量)

8.Secondary延迟备份

设置延时节点

cfg = rs.conf()

cfg.members[1].priority=0

cfg.members[1].hidden=true

cfg.members[1].slaveDelay=86400

rs.reconfig(cfg)

9.Secondary延迟恢复

从Secondary恢复数据的方法:

1、删除Primary中的testts库

2、mongodump -h localhost:30011 -d testts -o ~/data_dump0401 -u xxx -p xxx --authenticationDatabase 'admin'

3、mongorestore -h localhost:27017 -d testts --dir ./data_dump0401/testts -u xxx -p xxx --authenticationDatabase 'admin'

10.部署脚本

目前全量备份采用一周一次,增量备份采用一个小时一次,通过crontab来制定计划任务

[mongod@xxx toolbox]$ crontab –e

0 */1 * * * /bin/sh $HOME/toolbox/mongodb_backup_incremental.sh > /dev/null 2>&1

0 1 * * 7 /bin/sh $HOME/toolbox/mongodb_backup_all.sh > /dev/null 2>&1

11.常见错误

1)

Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { applyOps: [ { ts: Timestamp(1584405919, 1), h: 6249566449687893566, v: 2, op: "u", ns: "config.system.sessions", o: { $v: 1, $set: { lastUse: new Date(1584405919215) } }, o2: { _id: { id: UUID("d3558387-2eca-4d12-81ff-519b45c29af6"), uid: BinData(0, D98E3AF3AA9DE1E389AD41192C5A890F20F87082C7F958241BCACB06E71051FC) } } } ], $db: "admin" }

解决方法(在admin数据库中执行):

db.adminCommand({ createRole: "restoreEx", privileges: [ { resource: { db: "config", collection: "system.sessions" }, actions: [ "find", "update", "insert", "remove" ] }, ], roles: [ { role: "restore", db: "admin" } ], writeConcern: { w: "majority" , wtimeout: 5000 }})

db.createUser({user:“restore”, pwd:”pwd“, roles:[{role:”restoreEx“, db:”admin“}, {role:"readWriteAnyDatabase", db:"admin"}]})

2)Path与—dir不能同时用

3)

默认都加上-u xxx -p 'xxx' --authenticationDatabase 'admin'这个鉴权吧

4)

db.tttss.insert({bbb:”test delay”}, { writeConcern: { w:”majority(要用这个,不然用w:3就要等包括延时节点在内的3个节点都要返回的)", wtimeout: 5000 } })

文章来源: www.oschina.net,作者:KeeKee,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/u/4490756/blog/3217505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值