centos7內 docker mysql 自動備份shell

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章