?

免費教程_免費網賺教程_破解版軟件-寂涯網絡學習基地

當前位置: 主頁 > 網站相關 > 網站編程 > mongodb增量備份腳本以及原理

mongodb增量備份腳本以及原理

時間:2018-08-28 11:01來源:未知 整理:寂涯網絡 點擊:

可以用的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目標庫的權限)

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文件進行導入

    來自 mongodb增量備份腳本  https://www.oschina.net/p/-mongodb-backup-scriptpython。

     

本頁地址 http://www.ionrce.tw/wangzhanbiancheng/20180828977.html

百度搜索更多

谷歌搜索更多

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
?
評價:
昵稱: 驗證碼:點擊我更換圖片
推薦內容
贊助商
贊助商
?

關于本站免責聲明視頻更新google百度地圖視頻地圖RRS訂閱

如有什么問題請在本站留言,或發郵件到 hxt167#foxmail.com

内蒙古十一选五基本走势图手机版