我们平时的数据库为了避免误操作或者在迭代更新的时候都会对数据库进行备份,那么这边使用linux服务器自带的crontab定时脚本+linux shell脚本对我们博客的数据库进行备份。
分享两个网站一个是crontab教程、一个是根据表达式推算执行时间。
crontab 命令教程:https://www.runoob.com/linux/linux-comm-crontab.html
crontab 执行时间计算工具:https://tool.lu/crontab/
编写脚本
1.在服务器随便找个位置创建个文件夹,我创建文件夹/opt/scripts,在里面创建两个shell脚本(log_function.sh、mysql_backup.sh),创建/opt/backup,这个文件夹用来保存备份的sql文件。
2.mysql_backup.sh这个是数据库的备份脚本
- 先判断脚本是否存在
- 执行备份操作
- 删除过期的sql文件
- 确认文件大小即备份成功与否
#! /bin/bash
# Copyright by endwas
# date 2021-02-06
backup_path="/opt/backup"
user="root"
passwd="123456"
# 数据库名字
dbname="myblog"
host="localhost"
today=`date +'%Y%m%d-%H%M%S'`
sqlname=$dbname$today.sql
# 确认log脚本是否存在
if [ -e /opt/scripts/log_function.sh ]
then
source /opt/scripts/log_function.sh
else
echo -e "\033[41;37m /opt/scripts/log_function.sh is not exist. \033[0m"
exit 1
fi
# 数据库备份指令
backup(){
log_correct "开始执行备份脚本。删除14天过期备份"
mysqldump -h$host -u$user -p$passwd $dbname > $backup_path/$sqlname
}
# 删除过期sql文件
delete(){
find /opt/backup -mtime +14 -type f -name '*.sql' -exec rm -f {} \;
}
size(){
cd /opt/backup
# 查询sql备份文件大小
dd=`du -sh $sqlname`
if [ -s ./$sqlname ] ;
then
log_correct "myblog备份正常"
log_correct $dd
else
log_error "myblog备份失败"
fi
}
backup
delete
size
- \033...这些是输出日志颜色代码,可以忽略
3.log_function.sh这个是日志脚本,被mysql_backup.sh导入用于执行输出日志在/opt/scripts
#! /bin/bash
function log_correct(){
DATE=`date +'%Y%m%d-%H%M%S'`
USER=$(whoami)
echo "${DATE} ${USER} execute $0 [INFO] $@" >>/opt/scripts/log_info.log
}
function log_error(){
DATE=`date +'%Y%m%d-%H%M%S'`
USER=$(whoami)
echo "${DATE} ${USER} execute $0 [INFO] $@" >>/opt/scripts/log_error.log
}
function fn_log (){
if [ $? -eq 0 ]
then
log_correct " $@ successed! "
echo -e "\033[32m $@ sucessed. \033[0m"
else
log_error "$@ failed"
echo -e "\033[41;37m $@ failed! \033[0m"
exit
fi
}
设置定时脚本任务
1.输入crontab -e进入定时脚本编辑器 2.如果没有设置编辑器模式,提示你选择,推荐第三种和vim类似。
3.设置想要执行脚本的时间 这边是设置了每天凌晨一点进行备份,想要其他备份时间可以自行设置。
备份文件
这样就会在每天凌晨一点进行备份了,第一条为测试所以时间不准确。
评论