crontab+shell脚本实现数据库定时备份

在工作场景中我们经常会遇到定时备份数据库的需求,这里写一个案例使用crontab+shell脚本实现。

1. 实现目标

要求每天凌晨12点备份test数据库,并且将备份文件放到/home/mysql_backup目录下,文件名为backup_数据库名.年-月-日.sql.gz

2. 脚本编写

#!/bin/bash

# mysql的账户信息
user='root'
password='QAZqaz1234@'

# 数据库的服务器地址
mysql_host='192.168.33.131'

# 数据库的备份目录
backup_dir='/home/mysql_backup'



# 备份文件后缀名
backup_suffix="$(date "+%Y-%m-%d").sql.gz"

# 备份哪一个数据库
database='test'


function backup_db(){
  [ -d $backup_dir ] || mkdir -p $backup_dir
  backup_file="$backup_dir/backup_$database.$backup_suffix"
  mysqldump -u$user -p$password -h $mysql_host --single-transaction --routines --triggers --events --add-drop-database --databases $db | gzip > "$backup_file"

  if [ $? -eq 0 ]
    then
        echo "$(date "+%Y-%m-%d %H:%M:%S") 备份$database数据库成功,备份文件为$backup_file" >> $backup_dir/mysql_backup.log
    else 
        echo "$(date "+%Y-%m-%d %H:%M:%S") 备份$database数据库失败" >> $backup_dir/mysql_backup.log
    fi
}


main(){
    backup_db
}


main

3. 测试脚本

创建脚本文件并允许,可以看到已经备份成功,并且查看日志也是正常输出

4. crontab表达式解析

.---------------- 分钟 minute (0 - 59)
|  .------------- 小时 hour (0 - 23)
|  |  .---------- 日 day of month (1 - 31)
|  |  |  .------- 月 month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- 星期 day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |    .---- 执行脚本
|  |  |  |  |    |
0  0  *  *  *  command

5. 配置crontab

添加定时任务有两种方式,使用 crontab -e或编辑/etc/crontab文件。

[root@master ~]# crontab -e
0 0 * * * bash /root/backup_db.sh

6. 验证

查看crontab日志

[root@gt-32 ~]# less /var/log/cron

查看脚本日志

[root@gt-32 ~]# cat /home/mysql_backup/mysql_backup.log

7. 删除定时任务

使用crontab -e命令然后删除需要删除的行,或crontab -r将会删除所有定时任务。

你可能感兴趣的:(mysql,linux)