crontab+shell脚本实现数据库定时备份
2023-12-21 06:27:44
在工作场景中我们经常会遇到定时备份数据库的需求,这里写一个案例使用crontab+shell脚本实现。
1. 实现目标
要求每天凌晨3点备份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
将会删除所有定时任务。
文章来源:https://blog.csdn.net/m0_60169980/article/details/135110328
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!