1. 程式人生 > >mongo 定期備份指令碼

mongo 定期備份指令碼

一.定期備份指令碼

在Mongodb中我們使用mongodump命令來備份MongoDB資料。該命令可以匯出所有資料到指定目錄中。

mongodump命令可以通過引數指定匯出的資料量級轉存的伺服器。

>mongodump -h dbhost -d dbname -o dbdirectory


引數解釋:

-h:
MongDB所在伺服器地址,例如:127.0.0.1,當然也可以指定埠號:127.0.0.1:27017

-d:
需要備份的資料庫例項,例如:test

-o:
備份的資料存放位置,例如:c:\data\dump,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個test目錄,這個目錄裡面存放該資料庫例項的備份資料。
 

以下是定期備份的指令碼

#!/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_NAME=資料庫名稱
# 資料庫賬號
DB_USER=資料庫賬號
# 資料庫密碼
DB_PASS=資料庫密碼
# 代表刪除15天前的備份,即只保留近 15 天的備份
DAYS=15
# 最終儲存的資料庫備份檔案
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 -d $DB_NAME -o $OUT_DIR/$DATE
# 壓縮格式為 .tar.gz 格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
# 刪除 15 天前的備份檔案
find $TAR_DIR/ -mtime +$DAYS -delete

exit

指令碼解釋:

# dump 命令執行路徑,根據mongodb安裝路徑而定
DUMP=/usr/bin/mongodump
# 臨時備份路徑
OUT_DIR=/home/backup/mongod_bak/mongod_bak_now
# 壓縮後的備份存放路徑
TAR_DIR=/home/backup/mongod_bak/mongod_bak_list

二.Linux中使用crontab命令啟用自定義定時任務

所有使用者crontab檔案都存放在 /var/spool/cron/ 目錄下,以使用者名稱命名。其中每一行都代表一項任務,每行的每個欄位代表一項配置,它的格式一共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minute hour day month week command

  • minute: 表示分鐘,可以是從0到59之間的任何整數

  • hour:表示小時,可以是從0到23之間的任何整數

  • day:表示日期,可以是從1到31之間的任何整數

  • month:表示月份,可以是從1到12之間的任何整數

  • week:表示星期,可以是從0到7之間的任何整數,這裡的0或7代表星期日

  • command:表示需要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案

wKiom1f-447RkpcGAADq2h3iEls774.jpg

在以上各個欄位中,還可以使用以下特殊字元:

  • *    代表所有可能的值,例如:如果month欄位是星號,則表示在滿足其它欄位的約束條件後每月都執行該命令

  • ,     用逗號隔開的值表示一個範圍列表,例如:如果minute欄位的值是“1,3,15”,則表示每小時的第1分鐘、第3分鐘和第15分鐘都執行該命令

  • –    可以用整數之間的 – 表示一個整數範圍,例如:如果day欄位的值是“2-6”,則表示每月的第2天到底6天都執行該命令

  • /    可以用斜線表示命令的執行頻率,例如:如果minute欄位的值是“*/10”,則表示每十分鐘執行一次命令

三.其他(一個定時任務例項)

某臺伺服器每10分鐘向192.168.1.2進行時間同步:

[[email protected] cron]# vim /var/spool/cron/root

新增以下內容:

0-59/10 * * * * /usr/sbin/ntpdate -s 192.168.1.2

 

從上面的介紹可以知道,這句程式碼的意思是:從0到59分這個時間段每10分鐘都執行時間同步命令,其時間同步伺服器是192.168.1.2

四 一些其他例項

例項1:每1分鐘執行一次command
命令:
* * * * * command

例項2:每小時的第3和第15分鐘執行
命令:
3,15 * * * * command

例項3:在上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * * command

例項4:每兩天的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 */2 * * command

例項5:每個星期一的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * 1 command

例項6:每晚的21:30重啟smb
命令:
30 21 * * * /etc/init.d/smb restart

例項7:每月1、10、22日的4 : 45重啟smb
命令:
45 4 1,10,22 * * /etc/init.d/smb restart

例項8:每週六、週日的1 : 10重啟smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart

例項9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb
命令:
0,30 18-23 * * * /etc/init.d/smb restart

例項10:每星期六的晚上11 : 00 pm重啟smb
命令:
0 23 * * 6 /etc/init.d/smb restart