1、編寫shell腳本
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
dbuser=root #數據庫用戶名
dbpasswd=root #數據庫連接密碼
backtime=`date +%Y%m%d%H%M%S` #備份時間
logpath=/workspace/mysql_backup/log #日誌輸出
datapath=/workspace/mysql_backup/data #備份輸出
dbname=(testDb1 testDb2 testDb3) #需要備份的庫名,數組存放
echo "備份時間爲${backtime},備份數據庫表 ${dbname} 開始" >> ${logpath}/log.log
find $datapath -name "*.tar" -type f -mtime +30 -exec rm {} \; > /dev/null 2>&1 #刪除30天前備份,也就是隻保存30天內的備份
echo "刪除30天前的備份成功" >> ${logpath}/log.log
for table in ${dbname[@]}; #循環正式備份數據庫
do
source=`docker exec mysql57 mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${datapath}/${backtime}.sql` 2>> ${logpath}/log.log;
if [ "$?" == 0 ];then
cd $datapath
tar czvf ${table}"_"${backtime}.tar ${backtime}.sql > /dev/null #打包
rm ${datapath}/${backtime}.sql #刪除原始文件
echo "數據庫表 ${dbname} 備份成功!!" >> ${logpath}/log.log
else
echo "數據庫表 ${dbname} 備份失敗!!" >> ${logpath}/log.log
fi
done
注:/workspace/mysql_backup/log 和 /workspace/mysql_backup/data目錄 均爲宿主機目錄
2、安裝crontab
yum install crontabs
常用命令:
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //重新載入配置
service crond status //查看crontab服務狀態
service crond start //手動啓動crontab服務
crontab -l //查看當前用戶的crontab
crontab -e //編輯crontab,增加定時任務
crontab -r //刪除crontab
3、設置定時任務
crontab -e
注:每天凌晨兩點執行dump.sh腳本
dump.sh腳本存放路徑是宿主機下的/workspace/mysql_backup/sh/目錄
新上傳的sh文件可能沒有執行權限,須用 chmod a+x /workspace/mysql_backup/sh/dump.sh 執行授權
4、查詢任務是否加了:
crontab -l -u root #查看root用戶
cron語法如下:
.crontab文件格式:
* * * * * command
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字段如果是星號,則表示每月都執行該命令操作。
逗號(,):表示分隔時段的意思,例如,“1,3,5,7,9”。
中槓(-):表示一個時間範圍,例如“2-6”表示“2,3,4,5,6”。
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
crontab例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart //每晚的21:30重啓apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //每月1、10、22日的4 : 45重啓apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart //每週六、週日的1 : 10重啓apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //每天18 : 00至23 : 00之間每隔30分鐘重啓apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart //每星期六的11 : 00 pm重啓apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart //每一小時重啓apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart //晚上11點到早上7點之間,每隔一小時重啓apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart //每月的4號與每週一到週三的11點重啓apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart //一月一號的4點重啓apache