使用crond定时跑脚本备份数据库

前言:

开发环境

服务器: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. 修改1:数据库用户名
  2. 修改2:数据库密码
  3. 修改3:数据库名
  4. 修改4:备份文件的存储位置
  5. 修改5:mysqldump 的文件地址(可以使用 whereis mysqldump 查询mysqldump 所在位置)
  6. 修改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在也不用担心忘记备份数据库了。

猜你喜欢

转载自blog.csdn.net/weixin_41620505/article/details/130581186