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

总结

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

(0)

相关推荐

  • mongodb 数据库操作--备份 还原 导出 导入

    一,mongodump备份数据库 1,常用命令格 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户谁,可以去掉-u和-p. 如果导出本机的数据库,可以去掉-h. 如果是默认端口,可以去掉--port. 如果想导出所有数据库,可以去掉-d. 2,导出所有数据库 [root@localhost mongodb]# mongodump -h 127.0.0.1 -o /home/zhangy/mongodb/ connecte

  • MongoDB使用自带的命令行工具进行备份和恢复的教程

    要备份一个数据库, mongorestore -d db /path/to/back_up 例如: mongodump -d bookstore -o /data01/db_backup/ 该命令会dump出该DB所有的collection 从备份文件夹恢复数据 mongorestore -d bookstore /data01/db_backup/bookstore 只备份或回复指定的collection 以bookstore DB 中statistics 表为例 mongodump -d b

  • MongoDB整库备份与还原以及单个collection备份、恢复方法

    mongodump.exe备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保存的也不是实时的,因为在获取快照后,服务器还会有数据写入,为了保证备份的安全,同样我们还是可以利用fsync锁使服务器数据暂时写入缓存中. 高效开源数据库(mongodb)下载地址:http://www.jb51.net/softs/41751.html 备份前的检查> show dbsMyDB 0.0625GBadmin (empty)bruce 0.0625GBlocal (empty)t

  • mongodb增量/全量备份脚本的实现详解

    前言 mongodb备份脚本,可以全量或增量进行备份,两年前所写,目前网上mongodb备份相关的脚本也还是很少.下面话不多说了,来一起看看详细的介绍吧 功能 定期对mongodb数据库数据进行全量备份或增量备份(副本集架构),并可以压缩上传到阿里云oss(本地会先生成压缩包,可以设置不上传oss). 脚本运行环境 使用python语言编写,需安装python,pymongo和mongodb shell客户端(测试时使用python 2.7.6,pymongo 3.0.3和mongodb she

  • Mongodb实现定时备份与恢复的方法教程

    本文主要介绍了关于Mongodb实现定时备份与恢复的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: MongoDB 数据备份 在 MongoDB 中我们使用 mongodump 命令来备份 MongoDB 数据 语法如下: > mongodump -h dbhost -d dbname -o dbdirectory -u user -p password -h MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 -d 需要备份

  • Windows下自动备份MongoDB的批处理脚本

    这段批处理代码用于在Windows服务器上自动备份Mongodb数据库,每次备份会自动创建一个备份文件夹 1.编写一个bat文件,文件内容如下: 复制代码 代码如下: @ECHO OFF md D:\deployment\mongoDb\data\backup\%date:~0,4%-%date:~5,2%-%date:~8,2%\%time:~0,2%-%time:~3,2% mongodump -h 192.168.0.198 -d rssapp -o D:\deployment\mongo

  • 浅谈MongoDB的备份方式

    简要说一下MongoDB的备份方式: 1. mogodump / mongorestore 这2命令将mongodb的数据dump为BSON格式,需要的时候可以恢复. 这种方式作为小的数据库还适用.但如果是sharding或者几百G数据以上的话 就几乎不可用了.因为BSON及其占用空间. 2. Slave Replication 这是最适合和可靠的,适合生产环境.MongoDb支持master+多个slave.因此可以很方便的起一个slave来进行备份. 但是需要注意的是如果数据量很大的话,如果

  • MongoDB备份、还原、导出、导入、克隆操作示例

    数据库备份 – mongodump 备份本地所有MongoDB数据库: 复制代码 代码如下: # mongodump -h 127.0.0.1 --port 27017 -o /root/db/alldb 备份远程指定数据库: 复制代码 代码如下: # mongodump -h 192.168.1.233 --port 27018 -d yourdb -o /root/db/yourdb 更多mongodump详解 数据库还原-mongorestore 恢复所有数据库到MongoDB中: 复制代

  • Linux下MongoDB数据库实现自动备份详解

    本文主要给大家介绍的是关于Linux下MongoDB数据库实现自动备份的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一.创建MongoDB备份目录 mkdir -p /data/mongodb_bak/mongodb_bak_now mkdir -p /data/mongodb_bak/mongodb_bak_list 二.新建MongoDB数据库备份脚本(/data/mongodb_bak/MongoDB_bak.sh) #!/bin/bash #backup MongoDB

  • Windows或Linux系统中备份和恢复MongoDB数据的教程

    windows下面mongodb数据库备份和恢复 我可以讲数据备份到c:\data\dump目录下面,首先创建这个路径.然后进入到mongodb的bin目录下面 我的是: C:\Program Files\mongodb\bin 备份脚本是: //备份 mongodump -h 127.0.0.1:27017 -d test -o c:\data\dump 恢复脚本是: //恢复 mongorestore -h 127.0.0.1:27017 -d test --directoryperdb c

随机推荐