1. 程式人生 > 其它 >Linux 定時備份你的MongoDB資料庫

Linux 定時備份你的MongoDB資料庫

技術標籤:資料庫linux

前段時間,我個人的伺服器資料庫莫名其妙就被刪了,得知情況的我淚流滿面。

後來我搜了很多關於恢復資料庫的資料,但是基本都是依賴備份去恢復的,而身為小白的我卻沒有定時備份我的資料庫。

幸虧我的資料庫裡面的資料還不算多,就打算從頭開始。

經過這次疼痛的教訓,當時我第一件事就是給我的伺服器上一個定時備份的指令碼,畢竟不能再同一個地方摔兩次嘛。

順便寫個部落格記錄一下,以防以後還需要用到。

建立備份目錄

# 臨時備份資料夾
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 <備份檔案路徑>