当前位置: 首页 > 软件库 > 管理和监控 > 数据备份 >

mongodb_backup_scriptPython

增量备份脚本
授权协议 Apache
开发语言 Python
所属分类 管理和监控、 数据备份
软件类型 开源软件
地区 国产
投 递 者 从阎宝
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

功能

定期对mongodb数据库数据进行全量备份或增量备份,并可以压缩上传到阿里云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目标库的权限)

use 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/titan_backup/
    # 如果使用mongo客户端绿色版的,写上mongo客户端的绝对路径
    mongo_shell_path= /alidata1/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的用户权限)

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_titan_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_titan_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有大小限制,超过指定大小,新的记录会覆盖旧的操作记录。

全量脚本执行时的流程

  1. 备份mongodb数据库到本地

  2. 进行压缩

  3. 上传到oss

  4. 检验oss与本地文件的大小是否相同

  5. 删除本地备份文件

增量脚本执行时的流程

  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. 删除本地备份文件

恢复时脚本执行的流程

  1. 从oss上下载指定周期的备份文件到本地

  2. 对全量文件和增量oplog的zip文件进行解压

  3. 用 mongorestore对全量文件进行导入

  4. 用 mongorestore --oplogReplay 分别对各时间段的oplog文件进行导入

  • python 版本为2.7 mongodb版本2.6.5 使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们先来说说第一种 先读取文件内容,然后塞进bson.binary.Binary对象里,最后像平常那样写入数据库,是不是很简单呢,获取文件一样的简单,像平时那样查找数据,然后将二进制内容写入文件即可 #c

  • 转载:http://chenzhou123520.iteye.com/blog/ 1.Mongodb自带了mongodump和mongorestore这两个工具来实现对数据的备份和恢复: mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在

  • MongoDB mongodump 脚本命令可以用来备份 MongoDB 数据 MongoDB mongodump 脚本命令可以导出所有数据到指定目录中 语法 MongoDB mongodump 脚本命令语法如下: mongodump -h dbhost -d dbname -o dbdirectory 参数说明 -h: 需要导出 MongDB 数据所在的服务器地址 例如 127.0.0.1 ,当

  • #!/bin/sh DUMP=/usr/bin/mongodump #mongodump备份文件执行路径 OUT_DIR_document_directory_test=/mongo_backup/document_directory_test #临时备份目录 TAR_DIR_document_directory_test=/mongo_backup/document_directory_test

  • 备份 mongodump -h dbhost -d dbname -o dbdir上述语法中: -h MongDB所在服务器,可以附带指定端口号‘:port’ -d 需要备份的数据库实例 -o 备份数据存放的位置 如果以上参数都不指定,默认备份127.0.0.1端口号27017的所有数据库到当前的dump目录 C:\Users\Administrator>mongodump 2017-08-06T

  • 什么是 mongodump ? 备份 mongodb 数据,导出 bson 格式的文件 options 说明 一般选项 -help 返回选项和使用mongodump的信息。 -version 返回mongodump版本号。 信息显示选项 -v, -verbose 更详细的日志输出,增加多个 -v 的形式,输出更多的日志。如 mongodump -v -

  • 1 手动备份 mongo3.0手动备份命令: mongodump -h localhost:27017 --authenticationDatabase "admin" -o /data/backup/dump/2019_01_09 mongorestore -h localhost:27017 /data/backup/dump/2019_01_09 2 Mac自动备份脚本 mac本地正常运行备

  • 您可以用javascript编写mongo shell的脚本,以便在mongodb中操作数据或执行管理操作。 本教程介绍如何编写使用mongo shell访问mongodb的javascript。 打开新连接 从mongo shell或javascript文件,可以使用mongo()构造函数实例化数据库连接: new Mongo() new Mongo(<host>) new Mongo(<hos

  • bat脚本 参考博客:https://blog.csdn.net/qq_40140699/article/details/86696536 1、执行正确 @echo off rem 每天自动备份整个数据库,保存七天的压缩包,删除七天之前的数据。 cd /D C:\Program Files\MongoDB\Server\4.2\bin rem 以下这条单独执行是正常的 mongodump -u a

  • 在工作中遇到了需要将mysql的数据转换为mongodb的数据,该脚本基于python3.X,同时需要安装pymysql与pymongo的python库 额外功能如下: 1、增加java序列化需要的_class 2、是否使用mysql主键的功能 3、增加是否使用驼峰转换 4、增加是否使用bit(1)转Boolean #!/usr/bin/python3 import pymysql.cursors

  • 备份: mongodump -h 127.0.0.1:27017 --collection log_aliyun_operation --db log --gzip --archive=/home/20190619.archive 恢复: mongorestore -h 127.0.0.1:27017 --gzip --archive=/***/***/Desktop/test.archive

  • #!/usr/bin/env python # coding=utf-8 from pymongo import MongoClient from bson.objectid import ObjectId class MongoDB(object): def __init__(self): # 连接MongoDB 方式一 # self.client

  • 需要用到 bson 库 (bson 是 pymongo 的依赖库,安装 pymongo 即可 )安装命令 pip install pymongo import bson import gzip import re import pandas as pd from pandas import DataFrame def load_mongo_bson_gz_file_all( path ):

  • [root@mongodb ~]# more /opt/script/mongodb-data.sh #!/bin/bash #Author:lumia98@vip.qq.com #备份MongoDB-4.0.2 # MongoDB备份脚本、Linux环境、Centos、Redhat #mongodump执行 DUMP=mongodump #备份文件临时存放目录 OUT_DIR=/backup

 相关资料
  • This is a simple streaming file format for representing a diff between two snapshots (or a snapshot and the head) of an RBD image. Header “rbd diff v1\n” Metadata records Every record has a one byte “

  • 本文向大家介绍用Python写脚本,实现完全备份和增量备份的示例,包括了用Python写脚本,实现完全备份和增量备份的示例的使用技巧和注意事项,需要的朋友参考一下 需求: 在/root/backup下面有两个文件夹dst和src。要求在周一的时候进行完全备份,其余日子进行增量备份。从src备份到dst。 思路及关键点: 建立一个文件,以字典方式记录src的文件名以及文件对应的md5的值 完全备份的

  • 我想在系统中使用增量备份作为主要的cassandra备份类型,但我有一些误解: 从增量备份进行还原的一种方法对我有用 - 只需从备份文件夹复制到表文件夹,这是正确的方法吗? 我可以以某种方式备份表\键空间参数,如索引/replica_factor等吗? 谢谢。

  • 本文向大家介绍mysql增量备份及断点恢复脚本实例,包括了mysql增量备份及断点恢复脚本实例的使用技巧和注意事项,需要的朋友参考一下 简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。 目的 解

  • 本文向大家介绍Oracle自动备份脚本,包括了Oracle自动备份脚本的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 接下来给大家介绍linux oracle自动备份脚本 1、备份脚本: 2、添加到任务调度 crontab -u oracle -e * 3 * * * /home/bakup/bakup.sh 即每天凌晨3点进行备份 如需每天备份多次

  • Shell 脚本定期备份 mysql_config_editor — MySQL Configuration Utility 需要配置下mysql_config_editor mysql_config_editor set --login-path=client --host=localhost --user=localuser --password backup_parent_dir