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

 更新时间:2018年09月26日 10:32:54   作者:hxt168  
MongoDB本身不支持增量备份,所以这里介绍我找到的方法,下面这篇文章主要给大家介绍了关于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

增量脚本执行时的流程

  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文件进行导入

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • PHP中安装使用mongodb数据库

    PHP中安装使用mongodb数据库

    最近有个项目,需要用php操作mongoDb数据,所以了解下mongoDb为此整理了下,有需要的小伙伴可以参考下
    2015-12-12
  • mongodb 数据库操作详解--创建,切换,删除

    mongodb 数据库操作详解--创建,切换,删除

    mongodb是nosql里面最像关系型数据库的数据库。单表操作,基本上可以和关系型数据库差不多。mongodb比较易学,易用,分几期记录一下,学习和使用mongodb过程。
    2014-07-07
  • MongoDB 事务支持详解

    MongoDB 事务支持详解

    这篇文章主要介绍了MongoDB 事务支持详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • 开发分布式医疗挂号系统MongoDB集成实现上传医院接口

    开发分布式医疗挂号系统MongoDB集成实现上传医院接口

    这篇文章主要介绍了开发分布式医疗挂号系统MongoDB集成实现上传医院接口,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • MongoDB学习笔记—Linux下搭建MongoDB环境

    MongoDB学习笔记—Linux下搭建MongoDB环境

    本篇文章主要介绍了Linux下搭建MongoDB环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • MongoDB使用场景总结

    MongoDB使用场景总结

    这篇文章介绍了什么场景该用MongoDB,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • Mongodb在UPDATE操作中使用$pull的操作方法

    Mongodb在UPDATE操作中使用$pull的操作方法

    在UPDATE中使用$pull操作符,删除数组中的指定元素或删除符合条件的数组元素,本文基于Mongodb的官方文档,介绍使用$pull, 按照指定条件删除数组中的元素,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • MongoDB分片在部署与维护管理中常见的事项总结大全

    MongoDB分片在部署与维护管理中常见的事项总结大全

    分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程。下面这篇文章主要给大家总结介绍了关于MongoDB分片在部署与维护管理中常见事项的相关资料,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • mongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • MongoDB Shell常用基本操作命令详解

    MongoDB Shell常用基本操作命令详解

    这篇文章主要为大家介绍了MongoDB Shell常用基本操作命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论