mongodb增量备份脚本的实现和原理详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mongodb增量备份脚本的实现和原理详解
前⾔
mongodb的副本集架构,主库和从库的数据相同步,如果主库的机器坏掉,没什么关系,从库上还有相同的副本数据。

但如果某⼈恶意操作或误操作,⼀下⼦批量删除或drop整个库,这样主库和从库的数据都会没有,造成巨⼤损失。

因此,对mongodb数据库定期备份是⾮常重要的。

备份如果每次都全量备份,会消耗⼤量时间,并且对 mongodb性能也有
影响,从⽽需要能增量备份。

mongodb的增量备份⽹上没有现成的⼯具,故仔细研究了下写了个脚本。

mongodb集群架构时,从库是通过异步复制主库的Oplog⽂件,从⽽达到与主库的同步。

Oplog 记录了MongoDB数据库的更改操作信息,其保存在local库的oplog.rs表,在集群架构才存在,单机不会有,故增量备份不能在单机下使⽤。

oplog有⼤⼩限制,超过指定⼤⼩,新的记录会覆盖旧的操作记录。

mongodb增量备份原理
如何将某段时间的oplog下载下来,我拼接好的例⼦:
mongodump -h 127.0.0.1 --port 27117 -d local -c oplog.rs -u admin -p xxx --authenticationDatabase admin -q '{ts:{$gt:{$timestamp:{t:1451355000,i:1}},$lt:{$timestamp:{t:1451357430,i:1}}},ns:/^test_db\\./}' -o oplog_backup 上述是导出1451355000-1451357430时间之间的oplog,导出oplog需要切换到admin权限账户。

增量脚本执⾏时的流程
1. 读取上⼀个周期执⾏信息判断是否需要创建新的周期
2. 获得mongodb上oplog最近记录的时间点current timestamp position
3. 从本地读取上⼀次执⾏时mongodb的oplog时间点
4. dump导出全量数据或增量oplog⽂件到本地,增量oplog⽂件的导出范围是上次oplog记录点到最新时间内的oplog⽂件
5. 保存步骤2获取的current timestamp position到本地,作为下⼀次执⾏步骤3中的时间点
6. 进⾏压缩
7. 上传到oss
8. 删除本地备份⽂件
全量脚本执⾏时的流程
备份mongodb数据库到本地
进⾏压缩
上传到oss
检验oss与本地⽂件的⼤⼩是否相同
删除本地备份⽂件
恢复时脚本执⾏的流程
1. 从oss上下载指定周期的备份⽂件到本地
2. 对全量⽂件和增量oplog的zip⽂件进⾏解压
3. ⽤ mongorestore对全量⽂件进⾏导⼊
4. ⽤ mongorestore --oplogReplay 分别对各时间段的oplog⽂件进⾏导⼊
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

相关文档
最新文档