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

  • A+
所属分类: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权限账户。

原理很简单,但详细实现照样必要许多斟酌,详细看代码。剧本在一个周期内(如一礼拜)先备份一次全量数据库,后面每次进行增量备份。剧本地址:http://git.oschina.net/passer/mongodb_backup_script

增量剧本执行时的流程

读取上一个周期执行信息断定是否必要创立新的周期
得到mongodb上oplog比来记载的光阴点current timestamp position
从当地读取上一次执行时mongodb的oplog光阴点
dump导出全量数据或增量oplog文件到当地,增量oplog文件的导出规模是 前次oplog记载点到最新光阴内的oplog文件
保留步调2获取的current timestamp position到当地,作为下一次执行步调3中的光阴点
进行紧缩
上传到oss
删除当地备份文件

全量剧本执行时的流程

备份mongodb数据库到当地
进行紧缩
上传到oss
查验oss与当地文件的年夜小是否雷同
删除当地备份文件

规复时剧本执行的流程

从oss上下载指定周期的备份文件到当地
对全量文件和增量oplog的zip文件进行解压
用 mongorestore对全量文件进行导入
用 mongorestore --oplogReplay 分离对各光阴段的oplog文件进行导入

总结

以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

您可能感兴致的文章:

mongodb增量/全量备份剧本的实现详解mongodb 数据库操作--备份 还原 导出 导入MongoDB整库备份与还原以及单个collection备份、规复办法MongoDB备份、还原、导出、导入、克隆操作示例Windows下主动备份MongoDB的批处置剧本Mongodb实现准时备份与规复的办法教程Windows或Linux体系中备份和规复MongoDB数据的教程Linux下MongoDB数据库实现主动备份详解浅谈MongoDB的备份方式MongoDB使用自带的敕令行对象进行备份和规复的教程

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: