如何在mongodb中实现增量/全量备份脚本

分类:编程技术 时间:2024-02-20 15:27 浏览:0 评论:0
0
本文主要介绍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库用户ges。 (导出时会先切换到admin库验证权限,需要有查询本地库、mongodump本地库和mongodump目标库的权限)

使用 admin db.addUser( { user: "xxxxx", pwd: "xxxxx", Roles: [ "backup" ] } )

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.创建具有 applyOps 权限的 mongodb 角色以及使用该角色的用户。 (需要用户权限才能执行 mongorestore --oplogReplay)

use admin db.createRole( { role: "applyOpsRole", 权限: [ { 资源: { anyResource: true }, 操作: [ "anyAction"] } ], 角色: [] } ) db.addUser( { user: "xxxx", pwd: "xxxx", 角色: [ "applyOpsRole" ] } )

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" # oss上最近的circle backup direactory 最新备份文件的cycle名称,即备份临时目录中mongodb_inc_backup_info.json的last_circle_backup_dir_name或者oss中的文件夹名称 last_circle_backup_dir_name="mongodb_cycle_backup_20151124141133" # 下载from 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/" # 备份文件已下载到本地? if True,不会从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" # 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/" # 备份文件已下载到本地? 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记录了MongoDB数据库的变更操作信息。保存在本地库的oplog.rs表中。它只存在于集群架构中,不存在于单机上。因此增量备份不能在单机上使用。从库通过异步复制主库的Oplog文件来实现与主库的同步。 oplog 有大小限制。如果超过指定的大小,新的记录将覆盖旧的操作记录。

完整脚本的执行过程

本地备份mongodb数据库

压缩

< p>上传到oss

检查oss和本地文件大小是否相同

删除本地备份文件

增量脚本执行时的流程

读取上一个周期的执行信息,判断是否需要创建新的周期

获取mongodb上最近记录的oplog时间点的当前时间戳位置

从本地读取mongodb上次执行时的oplog时间点。

dump 将全量数据或增量oplog文件导出到本地。增量oplog文件的导出范围是最后一个oplog记录点。最近时间的oplog文件

将步骤2中获取的当前时间戳位置保存到本地计算机,作为下次执行步骤3的时间点

将其压缩

上传到oss

删除本地备份文件

恢复时脚本执行过程

从oss下载指定文件定期备份文件到本地

解压全量文件和增量oplog zip文件

使用mongorestore导入全量文件

使用mongorestore -- oplogReplay分别对每个时间段的oplog文件进行操作导入

Mongodb增量备份脚本源码地址:

https://gitee.com/passer/mongodb_backup_script

感谢您的认真看完这篇文章,希望文章小编分享的《如何在mongodb中实现增量/全量备份脚本》对大家会有帮助。也希望大家支持我,关注行业信息频道。更多相关知识等待您。学习!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在mongodb中实现增量/全量备份脚本

用户评论