mongodump一致性备份配合mongoshake进行数据灾备

一、初始化

源端导出数据

对源库进行一致性导出,一致性导出无法指定库名,需全量导出

mongodump -u admin -p admin1234 --host=localhost --port 27017 --gzip --oplog --out=/mongodb/backup/20230308/ 

获取mongo一致性导出时间点 ,时间显示为UTC,比中国正常时间晚8个小时,可以用于mongoshake增量同步,也可以用于oplog增量恢复
因为采用了压缩备份,生成的oplog.bson文件需要解压,首先需要修改文件名,否则解压不成功

cd /mongodb/backup/20230308/
cp oplog.bson /tmp/oplog.bson.gz
cd /tmp/
gzip -d oplog.bson.gz
bsondump oplog.bson > oplog
tail -100 oplog
{"op":"n","ns":"","o":{"msg":"periodic noop"},"ts":{"$timestamp":{"t":1678249800,"i":1}},"t":{"$numberLong":"32"},"v":{"$numberLong":"2"},"wall":{"$date":{"$numberLong":"1678249800877"}}}

db.oplog.rs.find({“ts”:{“$gt”:Timestamp(1678249800,1)}})是一致性备份最后的时间点,将时间戳转换为时间,后面的 1 表示当前时间点第几个操作

[root@Mon01 ~]# date -d @1678249800
Wed Mar  8 12:30:00 CST 2023
目标端导入数据
mongorestore -u admin -p admin1234 --host=localhost --port 27017 --gzip --oplogReplay /mongodb/backup/20230308/

二、恢复增量

源端导出增量数据

导出新生成的oplog ,根据当前时间获取合适的时间戳,作为导出oplog时的上线,虽然导出oplog后可以获取最后时间点,但是如果量太大的话难度会很大

[root@Mon01 ~]# date -d "2023-03-9 9:00:00" +%s
1678323600
mongodump -u admin -p admin1234 --authenticationDatabase admin --host localhost --port 27017 --gzip -d local -c oplog.rs -q '{"ts":{"$gte":{"$timestamp":{"t":1678249800,"i":1}},"$lt":{"$timestamp":{"t":1678323600,"i":1}}}}' --out=/mongodb/backup/20230309/
目标端恢复增量数据
mongorestore -u admin -p admin1234 --authenticationDatabase admin --host localhost --port 27017 --gzip --oplogReplay /mongodb/backup/20230309/local/oplog.rs.bson.gz

因为是异地灾备,建议多次采用恢复增量的方式,减少主从数据差异,降低MongoShake初次增量同步时的带宽压力

三、实时同步

部署mongoshake,参考链接
https://blog.csdn.net/u014650965/article/details/128069447

最后增量同步到2023-03-10 9:00:00
mongoshake配只文件修改如下参数,checkpoint.start_position为UTC时间,需要设置为2023-03-10T1:00:00Z

sync_mode = incr
mongo_urls = mongodb://username:password@source1:20040,source2:20041
tunnel.address = mongodb://target1:20080
filter.ddl_enable = true
checkpoint.start_position = 2023-03-10T1:00:00Z

启动mongoshake

 nohup ./collector.linux -conf=collector.conf -verbose 0 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值