久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mongodb如何實現(xiàn)增量/全量備份腳本

155次閱讀
沒有評論

共計 3988 個字符,預計需要花費 10 分鐘才能閱讀完成。

這篇文章主要介紹了 mongodb 如何實現(xiàn)增量 / 全量備份腳本,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

功能

定期對 mongodb 數(shù)據(jù)庫數(shù)據(jù)進行全量備份或增量備份(副本集架構),并可以壓縮上傳到阿里云 oss(本地會先生成壓縮包,可以設置不上傳 oss)。

腳本運行環(huán)境

使用 python 語言編寫,需安裝 python,pymongo 和 mongodb shell 客戶端(測試時使用 python 2.7.6,pymongo 3.0.3 和 mongodb shell 2.0.4)。

腳本部署步驟

1. 將腳本放到一臺 linux 主機

2. 如果是增量備份,創(chuàng)建 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 中的創(chuàng)建的用戶,或更高權限的 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. 創(chuàng)建 mongodb 具有 applyOps 權限的角色 以及用此角色的用戶。(需有執(zhí)行 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 創(chuàng)建的用戶
 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
 #  是否備份文件已經(jīng)下載到本地,如果 true,則不會從 oss 下載和解壓,本地已有
 has_download_to_local=False
 #  恢復時是否先刪除舊的數(shù)據(jù)庫
 is_drop_old_restore=True

3. 導入期間停止 mongodb 寫入

4. 執(zhí)行 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
 #  數(shù)據(jù)庫對應的用戶
 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
 #  是否備份文件已經(jīng)下載到本地,如果 true,則不會從 oss 下載和解壓,本地已有
 has_download_to_local=False
 #  恢復時是否先刪除舊的數(shù)據(jù)庫
 is_drop_old_restore=True

2. 執(zhí)行 restore_full.py

相關:

增量備份實現(xiàn)原理

一個周期內(nèi)(如一星期)先備份一次全量數(shù)據(jù)庫,然后后面每次備份 上次記錄點到最新時間內(nèi)的 oplog 文件。Oplog 記錄了 MongoDB 數(shù)據(jù)庫的更改操作信息,其保存在 local 庫的 oplog.rs 表,在集群架構才存在,單機不會有,故增量備份不能在單機下使用。從庫是通過異步復制主庫的 Oplog 文件,從而達到與主庫的同步。oplog 有大小限制,超過指定大小,新的記錄會覆蓋舊的操作記錄。

全量腳本執(zhí)行時的流程

備份 mongodb 數(shù)據(jù)庫到本地

進行壓縮

上傳到 oss

檢驗 oss 與本地文件的大小是否相同

刪除本地備份文件

增量腳本執(zhí)行時的流程

讀取上一個周期執(zhí)行信息判斷是否需要創(chuàng)建新的周期

獲得 mongodb 上 oplog 最近記錄的時間點 current timestamp position

從本地讀取上一次執(zhí)行時 mongodb 的 oplog 時間點

dump 導出全量數(shù)據(jù)或增量 oplog 文件到本地,增量 oplog 文件的導出范圍是 上次 oplog 記錄點到最新時間內(nèi)的 oplog 文件

保存步驟 2 獲取的 current timestamp position 到本地,作為下一次執(zhí)行步驟 3 中的時間點

進行壓縮

上傳到 oss

刪除本地備份文件

恢復時腳本執(zhí)行的流程

從 oss 上下載指定周期的備份文件到本地

對全量文件和增量 oplog 的 zip 文件進行解壓

用 mongorestore 對全量文件進行導入

用 mongorestore –oplogReplay 分別對各時間段的 oplog 文件進行導入

mongodb 增量備份 腳本源碼地址:

https://gitee.com/passer/mongodb_backup_script

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“mongodb 如何實現(xiàn)增量 / 全量備份腳本”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業(yè)資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計3988字。
轉(zhuǎn)載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 邮箱| 舒兰市| 花莲市| 高陵县| 浠水县| 巴东县| 汤阴县| 祁东县| 廊坊市| 河曲县| 汶川县| 新安县| 读书| 十堰市| 伊金霍洛旗| 蓬安县| 西吉县| 武宁县| 许昌市| 岳普湖县| 绩溪县| 诸城市| 沅陵县| 秭归县| 济源市| 南靖县| 凌云县| 汉源县| 卫辉市| 辽阳市| 阿鲁科尔沁旗| 化德县| 湟中县| 新龙县| 安吉县| 固原市| 永嘉县| 永福县| 时尚| 兴城市| 平度市|