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:表示需要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案
在以上各個欄位中,還可以使用以下特殊字元:
-
* 代表所有可能的值,例如:如果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