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

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