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

  • A+
所属分类:MongoDB

前言

mongodb备份剧本,可以全量或增量进行备份,两年前所写,今朝网上mongodb备份相关的剧本也照样很少。下面话不多说了,来一路看看具体的先容吧

功效

按期对mongodb数据库数据进行全量备份或增量备份(副本集架构),并可以紧缩上传到阿里云oss(当地会老师成紧缩包,可以设置不上传oss)。

剧本运行情况

使用python语言编写,需安装python,pymongo和mongodb shell客户端(测试时使用python 2.7.6,pymongo 3.0.3和mongodb shell 2.0.4)。

剧本部署步调

1. 将剧本放到一台linux主机

2. 假如是增量备份,创立mongodb 备份脚色用户或更高权限的admin库用户。(导出时会先切换到admin库来验证权限,需有查询local库,mongodump local库和mongodump目的库的权限)

3. 编纂config.properties,改动oss、mongodb衔接等设置装备摆设信息

## 阿里云oss 衔接设置装备摆设
 endpoint= oss.aliyuncs.com
 accessKeyId = xxxxxxx
 accessKeySecret = xxxxxxx
 bucket = db-backup
 ## mongodb 衔接设置装备摆设
 # 建议用从库的地址,削减对主库压力
 db_host= localhost
 db_port= 27017
 # 假如是增量备份计划,为步调2中的创立的用户,或更高权限的admin用户;假如是全量备份计划,则只需有目的库的操作权限
 db_user= testb
 db_passwd= testb
 # 目的库
 db_name= che
 # 备份到当地的暂时目次 
 db_backup_root_path= /temp/backup/
 # 假如使用mongo客户端绿色版的,写上mongo客户真个绝对路径
 mongo_shell_path= /dev/hanxuetong/mongodb/mongodb-linux-x86_64-3.0.6/bin/
 # 增量备份照样全量备份 1: 增量备份 0:全量备份
 is_inc_backup=1
 # 每若干天进行一次全量备份
 full_backup_period=7
 # 是否上传到oss,假如 1 ,上传胜利后会删除当地备份文件;0:不上传到oss
 is_upload_to_oss= 0

4. 将start.py参加linux准时义务。crontab义务设置装备摆设如 0 4 * * * python /xxx/start.py >> /xxx/xxx.log 2>&1

增量时规复步调:

1. 创立mongodb 具有applyOps权限的脚色 以及用此脚色的用户。(需有执行 mongorestore --oplogReplay的用户权限)

2. 改动 restore_inc.py里的设置装备摆设

## 阿里云oss 设置装备摆设
 endpoint="大众oss.aliyuncs.com"大众
 accessKeyId="大众xxxxxxx"大众
 accessKeySecret="大众xxxxxxx"大众
 bucket="大众db-backup"大众

 ## mongodb导入的设置装备摆设
 db_host="大众localhost"大众
 db_port=27017
 # 步调1创立的用户
 db_user="大众testr"大众
 db_passwd="大众testr"大众 
 db_name="大众che"大众

 # recent circle backup direactory on oss 最新备份文件的周期名,即备份暂时目次中mongodb_inc_backup_info.json的last_circle_backup_dir_name 或 oss中文件夹名
 last_circle_backup_dir_name="大众mongodb_cycle_backup_20151124141133"大众
 # 从oss上下载到当地的暂时目次
 restore_local_temp_path="大众H:\\pythoncode\\temp\\restore\\"大众
 # 假如使用mongo客户端绿色版的,写上mongo客户真个绝对路径
 mongo_shell_path= "大众/alidata1/dev/hanxuetong/mongodb/mongodb-linux-x86_64-3.0.6/bin/"大众
 # backup file has download to local ? if True,will not download backup files from oss
 # 是否备份文件已经下载到当地,假如true,则不会从oss下载息争压,当地已有
 has_download_to_local=False
 # 规复时是否先删除旧的数据库
 is_drop_old_restore=True

3. 导入时代结束mongodb写入

4. 执行 restore_inc.py

全量时规复步调:

1. 改动 restore_full.py里的设置装备摆设

## 阿里云oss 设置装备摆设
 endpoint="大众oss.aliyuncs.com"大众
 accessKeyId="大众xxxxxxx"大众
 accessKeySecret="大众xxxxxxx"大众
 bucket="大众db-backup"大众

 ## mongodb导入的设置装备摆设
 db_host="大众localhost"大众
 db_port=27017
 # 数据库对应的用户
 db_user="大众test"大众
 db_passwd="大众test"大众 
 db_name="大众che"大众

 # recent circle backup direactory on oss 最新备份文件的周期名, oss 上存储的文件名称是 last_circle_backup_dir_name+last_full_backup_file_suffix
 last_circle_backup_dir_name="大众mongodb_cycle_backup_20151124141133"大众

 last_full_backup_file_suffix="大众.tar.gz"大众
 # 备份的目次,现实全量备份的路径为 restore_local_temp_path+last_circle_backup_dir_name+db_name
 restore_local_temp_path="大众H:\\pythoncode\\temp\\restore\\"大众
 # 假如使用mongo客户端绿色版的,写上mongo客户真个绝对路径
 mongo_shell_path="大众/alidata1/dev/hanxuetong/mongodb/mongodb-linux-x86_64-3.0.6/bin/"大众
 # backup file has download to local ? if True,will not download backup files from oss
 # 是否备份文件已经下载到当地,假如true,则不会从oss下载息争压,当地已有
 has_download_to_local=False
 # 规复时是否先删除旧的数据库
 is_drop_old_restore=True

2. 执行 restore_full.py

相关:

增量备份实现原理

一个周期内(如一礼拜)先备份一次全量数据库,然后后面每次备份 前次记载点到最新光阴内的oplog文件。 Oplog 记载了MongoDB数据库的变动操作信息,其保留在local库的oplog.rs表,在集群架构才存在,单机不会有,故增量备份不克不及在单机下使用。从库是经由过程异步复制主库的Oplog文件,从而到达与主库的同步。 oplog有年夜小限定,跨越指定年夜小,新的记载会笼罩旧的操作记载。

全量剧本执行时的流程

备份mongodb数据库到当地

进行紧缩

上传到oss

查验oss与当地文件的年夜小是否雷同

删除当地备份文件

增量剧本执行时的流程

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

规复时剧本执行的流程

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

mongodb增量备份 剧本源码地址:

https://gitee.com/passer/mongodb_backup_script

总结

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

您可能感兴致的文章:

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

发表评论

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