在工作场景中我们经常会遇到定时备份数据库的需求,这里写一个案例使用crontab+shell脚本实现。
要求每天凌晨12点备份test数据库,并且将备份文件放到/home/mysql_backup目录下,文件名为backup_数据库名.年-月-日.sql.gz
#!/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
创建脚本文件并允许,可以看到已经备份成功,并且查看日志也是正常输出
.---------------- 分钟 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
添加定时任务有两种方式,使用 crontab -e
或编辑/etc/crontab文件。
[root@master ~]# crontab -e
0 0 * * * bash /root/backup_db.sh
查看crontab日志
[root@gt-32 ~]# less /var/log/cron
查看脚本日志
[root@gt-32 ~]# cat /home/mysql_backup/mysql_backup.log
使用crontab -e
命令然后删除需要删除的行,或crontab -r
将会删除所有定时任务。