Linux 定時備份你的MongoDB資料庫
阿新 • • 發佈:2020-12-26
前段時間,我個人的伺服器資料庫莫名其妙就被刪了,得知情況的我淚流滿面。
後來我搜了很多關於恢復資料庫的資料,但是基本都是依賴備份去恢復的,而身為小白的我卻沒有定時備份我的資料庫。
幸虧我的資料庫裡面的資料還不算多,就打算從頭開始。
經過這次疼痛的教訓,當時我第一件事就是給我的伺服器上一個定時備份的指令碼,畢竟不能再同一個地方摔兩次嘛。
順便寫個部落格記錄一下,以防以後還需要用到。
建立備份目錄
# 臨時備份資料夾 mkdir -p /home/mongodb_bak/mongodb_bak_now # 備份壓縮包資料夾 mkdir -p /home/mongodb_bak/mongodb_bak_list
建立備份指令碼
vim /home/crontab/MongoDB_bak.sh
#!/bin/sh
# dump 命令執行路徑,根據mongodb安裝路徑而定
DUMP=/usr/bin/mongodump
# 臨時備份路徑
OUT_DIR=/home/backup/mongod_bak/mongod_bak_now
# 壓縮後的備份存放路徑
TAR_DIR=/home/backup/mongod_bak/mongod_bak_list
# 當前系統時間
DATE=`date +%Y-%m-%d`
# 資料庫賬號
DB_USER=username
# 資料庫密碼
DB_PASS=password
# 代表刪除7天前的備份,即只保留近 7 天的備份
DAYS=7
# 最終儲存的資料庫備份檔案
TAR_BAK="mongod_bak_$DATE.tar.gz"
cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
$DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS --authenticationDatabase admin -o $OUT_DIR/$DATE
# 壓縮格式為 .tar.gz 格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
# 刪除 15 天前的備份檔案
find $TAR_DIR / -mtime +$DAYS -delete
exit
將DB_USER
改為你的資料庫賬號,DB_PASS
改為你的資料庫密碼。
修改指令碼許可權
chmod +x /home/crontab/MongoDB_bak.sh
新增計劃任務
vi /etc/crontab
新增一下內容:
# 每週六18:30進行備份
30 18 * * 6 root /home/crontab/MongoDB_bak.sh
第一個數值代表分鐘,第二個代表小時,第三個代表日期,第四個代表月份,第五個代表星期。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
儲存後腳本生效。
資料庫恢復
#恢復全部資料庫
mongorestore -u <資料庫賬號> -p <資料庫密碼> --authenticationDatabase "admin" --noIndexRestore --dir <備份資料夾路徑>
#恢復單個數據庫
mongorestore -u <資料庫賬號> -p <資料庫密碼> --authenticationDatabase "admin" --noIndexRestore -d <資料庫名> --dir <備份檔案路徑>