备份集过期时间_MongoDB全量/增量的备份/恢复

MongoDB现有备份恢复方案:

1. mongodump/mongorestore(BSON)2. mongoexport/mongoimport(JSON,CSV)3. MongoDB cloud service Atlas(incremental backup/snapshot)4. Filesystem Snapshots(lvm,Amazon’s EBS storage system for EC2)5. cp or rsync(lock database)6 Percona Backup MongoDB

其中支持全量+增量备份,恢复的工具为mongodump/mongorestore。虽然mongodump/mongorestore为逻辑备份,在大型MongoDB系统中,备份/恢复效率较差,但是却具备增量备份/恢复的功能。这次进行一下全量+增量备份,恢复的测试

环境准备:

本次测试基于MongoDB副本集:centos 7.3:192.168.56.108 primary192.168.56.109 secondary192.168.56.110 arbiter192.168.56.111 nfs serverMongoDB server:4.2.7MongoDB client:4.0.19(4.2.x版本在增量备份时对特殊字符的支持有变动)

数据准备:

2840f1f1c4c2b8b9d3ce84558446b1ca.png

全量备份:

可在副本集任一节点执行,最好在从库: PS:mongodump备份时不需要锁库,可以通过--oplog参数将备份时段的变更记录以日志形式一起备份出来(单实例不支持oplog)

/usr/local/mongo/bin/mongodump -u admin -p 123456 -h localhost --port 27017 --authenticationDatabase admin --oplog -o /var/lib/mongobak/mongodump_`date +%Y-%m-%d_%H:%M:%S`

8b835ef0bf81de3e867eeb3b327206cf.png

mongodump全量备份会转储admin库下的users和version,所有的用户库和备份时段内的oplog

3b1804317d6e064d79286d106e4f4bcf.png

转储格式为bson格式的数据文件和json格式的元数据文件
全量备份单实例不能加--oplog,oplog只有在集群初始化时才会创建,用于复制。单实例没有oplog,指定--oplog会报错

6bf557f75b823d291ef7adc03f789a46.png

增量备份(日志备份):
只有副本集可以增量备份,单实例没有oplog无法增备
根据全量备份时段备份的的oplog,获取全量备份完成的时间戳:

bsondump oplog.bson

e618af14b4547064a85123046554a99b.png

可以得出时间戳为(1593309601,1),后期可以通过脚本解析json直接获取

这里说明一下:

MongoDB中的时间戳为(timestamp,i)的形式,其中timestamp为十位时间戳,精确到秒,i表示累增序数,记录着该时间戳内有多少并发操作。

主库插入两条记录:

c62225a101fd14527cf56d60d8bf4e49.png

基于时间戳的增量备份:

/usr/local/mongo/bin/mongodump -u admin -p 123456 -h localhost --port 27017 --authenticationDatabase admin -d local -c oplog.rs --query '{ts:{$gt:Timestamp(1593309601,1)}}' -o /var/lib/mongobak/mongodump_oplog_`date +%Y-%m-%d_%H:%M:%S`

7d1d69f29fcdefc3282bd58ded9fdae8.png

全量恢复:mongorestore恢复时,需要服务开启且停止业务写入,防止数据恢复时写入导致数据错乱

同机(副本集)全量恢复
同副本集的恢复,需要指定主库ip,在主库上做恢复,通过oplog同步给从库

/usr/local/mongo/bin/mongorestore -h 192.168.56.108 -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_2020-06-28_10\:06\:02/

a9cd3a416dfdd11a4319d16b63a439da.png

 PS:mongorestore只针对insert做恢复,不会恢复update。对于同一个_id的文档,mongorestore会认定为重复并跳过。
可以使用--drop,在import前先删除collection:

/usr/local/mongo/bin/mongorestore -h 192.168.56.108 -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_2020-06-28_10\:06\:02/

14ec7e75a373cffa3c45c7483b24fdb8.png

异机单实例全量恢复新建虚机:192.168.56.112,挂载NFS拉取上述副本集的备份

/usr/local/mongo/bin/mongorestore -h localhost -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_2020-06-28_10\:06\:02/

b33e5c4c65ae56d0525d42013a6ec260.png

可以正常恢复

增量恢复:同机(副本集)增量恢复

/usr/local/mongo/bin/mongorestore -h 192.168.56.108 -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_oplog_2020-06-28_16:06:00

479281743f87b2e7db07677d69310228.png

19cc816fb0e54fdfccd7e3412275b36c.png

异机单实例增量恢复
在192.168.56.112上基于上面全量恢复后的增量恢复

/usr/local/mongo/bin/mongorestore -h localhost -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_oplog_2020-06-28_16:06:00

19cc816fb0e54fdfccd7e3412275b36c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值