加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

mongodb如何定期对数据库做全量或增量备份?

发布时间:2023-12-28 21:26:08 所属栏目:系统 来源:DaWei
导读: 这篇文章主要介绍的是关于mongodb备份的内容,包括mongodb增量备份和mongodb全量备份的实现,感兴趣的朋友可以参考,下面我们就一起来看看mongodb备份脚本。

功能
       这篇文章主要介绍的是关于mongodb备份的内容,包括mongodb增量备份和mongodb全量备份的实现,感兴趣的朋友可以参考,下面我们就一起来看看mongodb备份脚本。

       功能
       定期对mongodb数据库数据进行全量备份或增量备份(副本集架构),并可以压缩上传到阿里云oss(本地会先生成压缩包,可以设置不上传oss)。

       增量时恢复步骤:
       1. 创建mongodb 具有applyOps权限的角色 以及用此角色的用户。(需有执行 mongorestore --oplogReplay的用户权限)
use admin
 db.createRole(
 {
 role: "applyOpsRole",
 privileges: [
 { resource: { anyResource: true }, actions: [ "anyAction"] }
 ],
 roles: []
 }
 )
 db.addUser( { user: "xxxx",
 pwd: "xxxx",
 roles: [ "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"

 # 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增量备份 

       以上就是关于实现mongodb备份脚本的介绍,现在大家对mongodb增量/全量备份应该都有一定的了解了,需要的朋友可以参考上述代码,希望文本对大家有帮助。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章