近期在生產環境中碰到mongodb數據庫備份問題,所以整理了一下腳本,大家拿去盡管享用。
在mongodb中創建備份賬號
使用管理員賬號登錄mongodb數據庫:
[root@renwolecomdbs /]$ mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 > use admin switched to db admin 認證 > db.auth("admin","KM5d9KhJcW7O0lIAT")
登錄后復制
下面開始創建mongodb備份專有賬號:
> db.createUser( { user: "renwolebackup", pwd: "RenwoleComACC", roles: [ { role: "backup", db: "admin" } ] } ) > exit
登錄后復制
創建備份腳本存放目錄及文件
$ mkdir -p /etc/init.d/mongo $ mkdir -p /apps/data/mongobackup_db $ vim /etc/init.d/mongo/mongo-bak 添加以下內容: #!/bin/bash sourcepath='' targetpath='/apps/data/mongobackup_db' nowtime=$(date +%Y%m%d) start() { ${sourcepath}mongodump --host 127.0.0.1:27017 -u renwolebackup -p renwolebackup --out ${targetpath}/${nowtime} } execute() { start if [ $? -eq 0 ] then echo "back successfully!" else echo "back failure!" fi } if [ ! -d "${targetpath}/${nowtime}/" ] then mkdir ${targetpath}/${nowtime} fi execute echo "============== back end ${nowtime} =============="
登錄后復制
以上腳本中,請注意路徑和文件夾根據你自己的需求修改。
注意:以上參數是我自己的實際使用情況,在使用前一定要認真閱讀代碼中的設置情況。
如果上面代碼執行時報格式錯誤,請在Windwos下使用Notepad++轉換為unix格式即可,具體操作如下:
編輯-文檔格式轉換-轉換為unix格式。
刪除過期7天備份
$ vim /etc/init.d/mongo/mongo-delete 添加如下刪除內容: #!/bin/bash targetpath='/apps/data/mongobackup_db' nowtime=$(date -d '-7 days' "+%Y%m%d") if [ -d "${targetpath}/${nowtime}/" ] then rm -rf "${targetpath}/${nowtime}/" echo "=======${targetpath}/${nowtime}/===刪除成功==" fi echo "===$nowtime ==="
登錄后復制
設置權限
如果不給執行權限則無法運行腳本:
$ cd /etc/init.d/mongo $ chmod +x mongo-bak $ chmod +x mongo-delete
登錄后復制
添加定時任務
為達到每天備份的目的,請設置任務計劃:
$ mkdir -p /var/log/mongobaklog $ crontab –e 添加以下自動備份和刪除備份腳本內容: 30 03 * * * /etc/init.d/mongo/mongo-bak 1 > /var/log/mongobaklog/mongo-bak.log & 30 01 * * * /etc/init.d/mongo/mongo-delete 1 > /var/log/mongobaklog/mongo-delete &
登錄后復制
前面所示分別為每日凌晨3.30和1.30執行該腳本的時間。
其中 mongo-bak 和 mongo-delete 分別是腳本的名稱。后面的是備份日志情況,如果有異常可以通過日志查詢。