前言:
开发环境
服务器:centos 7(腾讯云轻量服务器)
数据库:mysql 5.7
一、crond是什么?
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
二、使用步骤
1.crond常用命令
- 检测系统是否安装crond服务
- crond服务命令说明
- service crond start //启动服务
- service crond stop //关闭服务
- service crond restart //重启服务
- service crond reload //重新载入配置
- service crond status //查看crontab服务状态
- crontab -e #编辑crontab定时任务
- crontab -l #查询crontab任务
- crontab -r #删除当前用户所有的crontab任务
- systemctl status crond.service #查看crond系统服务的状态
1.1启动服务
service crond start
1.2 添加任务
crontab -e
1.3 查看任务是否添加成功
crontab -l
2.crond定时任务格式
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
00 | 02 | * | * | * | /back.sh |
minute | hour | day | month | week | command |
#定时脚本 下面的意思就是 每天的凌晨2点执行一次脚本 (根据自己的需求执行脚本)
00 02 * * * /usr/local/mysql/mysqlzip/back.sh
其中:
- minute:表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
注意:脚本的路径必须是脚本全路径(全路径:就是通过pwd命令获取的路径)
3.编写脚本
- 修改1:数据库用户名
- 修改2:数据库密码
- 修改3:数据库名
- 修改4:备份文件的存储位置
- 修改5:mysqldump 的文件地址(可以使用 whereis mysqldump 查询mysqldump 所在位置)
- 修改6:超过7个文件删除最早备份的文件 ,根据自己的实际需求更改;添加目的为了防止备份太多占用太多存储。
#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=修改1
# 密码
PASSWORD=修改2
# 要备份的数据库
DB=修改3
# Docker容器ID
#DOCKERID=********
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录 修改4
DIR=/usr/local/mysql/mysqlzip
echo 'Get system date: ' $DATE
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
# 使用docker进入mysql容器,执行mysqldump备份数据库文件
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
#docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# 备份 直接安装在 linux 系统中的数据库 修改5
/usr/local/mysql/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# just backup the latest 7 days
#保留最近文件数7,删除其它多余的文件 修改6 (也可以去掉 主要为了防止备份太多占用太多存储)
ReservedNum=7
date=$(date "+%Y%m%d-%H%M%S")
FileNum=$(ls -l $DIR|grep ^- |wc -l)
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt $DIR| head -1)
echo $date "Delete File:"$OldFile
rm -rf $DIR/$OldFile
let "FileNum--"
done
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
3.1 检测运行 刚刚编写好的 sh脚本
赋予权限,运行
chmod 777 back.sh
然后测试运行sh脚本
./back.sh
总结
有了crontab在也不用担心忘记备份数据库了。