麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

mongodb增量/全量備份腳本的實(shí)現(xiàn)詳解

2020-03-14 12:49:19
字體:
供稿:網(wǎng)友

前言

mongodb備份腳本,可以全量或增量進(jìn)行備份,兩年前所寫,目前網(wǎng)上mongodb備份相關(guān)的腳本也還是很少。下面話不多說了,來一起看看詳細(xì)的介紹吧

功能

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

腳本運(yùn)行環(huán)境

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

腳本部署步驟

1. 將腳本放到一臺linux主機(jī)

2. 如果是增量備份,創(chuàng)建mongodb 備份角色用戶或更高權(quán)限的admin庫用戶。(導(dǎo)出時(shí)會先切換到admin庫來驗(yàn)證權(quán)限,需有查詢local庫,mongodump local庫和mongodump目標(biāo)庫的權(quán)限)

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)建的用戶,或更高權(quán)限的admin用戶;如果是全量備份方案,則只需有目標(biāo)庫的操作權(quán)限 db_user= testb db_passwd= testb # 目標(biāo)庫 db_name= che # 備份到本地的臨時(shí)目錄  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 # 每多少天進(jìn)行一次全量備份 full_backup_period=7 # 是否上傳到oss,如果 1 ,上傳成功后會刪除本地備份文件;0:不上傳到oss is_upload_to_oss= 0

4. 將start.py加入linux定時(shí)任務(wù)。crontab任務(wù)配置如 0 4 * * * python /xxx/start.py >> /xxx/xxx.log 2>&1

增量時(shí)恢復(fù)步驟:

1. 創(chuàng)建mongodb 具有applyOps權(quán)限的角色 以及用此角色的用戶。(需有執(zhí)行 mongorestore --oplogReplay的用戶權(quán)限)

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導(dǎo)入的配置 db_host="localhost" db_port=27017 # 步驟1創(chuàng)建的用戶 db_user="testr" db_passwd="testr"  db_name="che" # recent circle backup direactory on oss 最新備份文件的周期名,即備份臨時(shí)目錄中mongodb_inc_backup_info.json的last_circle_backup_dir_name 或 oss中文件夾名 last_circle_backup_dir_name="mongodb_cycle_backup_20151124141133" # 從oss上下載到本地的臨時(shí)目錄 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 # 恢復(fù)時(shí)是否先刪除舊的數(shù)據(jù)庫 is_drop_old_restore=True

3. 導(dǎo)入期間停止mongodb寫入

4. 執(zhí)行 restore_inc.py

全量時(shí)恢復(fù)步驟:

1. 修改 restore_full.py里的配置

## 阿里云oss 配置 endpoint="oss.aliyuncs.com" accessKeyId="xxxxxxx" accessKeySecret="xxxxxxx" bucket="db-backup" ## mongodb導(dǎo)入的配置 db_host="localhost" db_port=27017 # 數(shù)據(jù)庫對應(yīng)的用戶 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" # 備份的目錄,實(shí)際全量備份的路徑為 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 # 恢復(fù)時(shí)是否先刪除舊的數(shù)據(jù)庫 is_drop_old_restore=True

2. 執(zhí)行 restore_full.py

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

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

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

進(jìn)行壓縮

上傳到oss

檢驗(yàn)oss與本地文件的大小是否相同

刪除本地備份文件

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

  1. 讀取上一個(gè)周期執(zhí)行信息判斷是否需要創(chuàng)建新的周期
  2. 獲得mongodb上oplog最近記錄的時(shí)間點(diǎn)current timestamp position
  3. 從本地讀取上一次執(zhí)行時(shí)mongodb的oplog時(shí)間點(diǎn)
  4. dump導(dǎo)出全量數(shù)據(jù)或增量oplog文件到本地,增量oplog文件的導(dǎo)出范圍是 上次oplog記錄點(diǎn)到最新時(shí)間內(nèi)的oplog文件
  5. 保存步驟2獲取的current timestamp position到本地,作為下一次執(zhí)行步驟3中的時(shí)間點(diǎn)
  6. 進(jìn)行壓縮
  7. 上傳到oss
  8. 刪除本地備份文件

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

  1. 從oss上下載指定周期的備份文件到本地
  2. 對全量文件和增量oplog的zip文件進(jìn)行解壓
  3. 用 mongorestore對全量文件進(jìn)行導(dǎo)入
  4. 用 mongorestore --oplogReplay 分別對各時(shí)間段的oplog文件進(jìn)行導(dǎo)入

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

https://gitee.com/passer/mongodb_backup_script

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MongoDB頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本人乱人乱亲乱色视频观看 | 国产亚洲精品成人 | 羞羞视频免费观看网站 | 久久免费观看一级毛片 | 国产亚洲精品久久久久久久久 | 毛片免费视频播放 | 精品国产精品久久 | 全免费午夜一级毛片真人 | 欧美成人免费 | 免费a级观看 | 欧美性色黄大片www 成人免费网站在线观看 | hd日本xxxx| 欧美日韩大片在线观看 | 久久久一区二区精品 | 男女一边摸一边做羞羞视频免费 | 中文字幕22页 | 香蕉视频破解 | 欧美日本日韩 | 日韩电影一区二区 | 免费国产wwwwwww网站 | omofun 动漫在线观看 | 毛片在线免费观看完整版 | 色骚综合 | 久久久精品视频免费看 | 久久sp| 精品国产专区 | 欧美在线a | 特一级毛片 | 国产精品免费一区二区三区四区 | 国产视频在线观看一区二区三区 | 日韩精品dvd | 神马顶级推理片免费看 | 日韩毛片网 | 色综合777 | 精品久久久av | 国产成年人网站 | 亚洲尻逼视频 | 亚洲成人免费影视 | 欧美一区成人 | 男人的天堂视频网站 | 欧美18—19sex性hd按摩 |