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