1、创建备份定时任务
查看crontab表达式规则
cat /etc/crontab
查看所有定时任务
crontab -l
进入crontab编辑界面,添加定时任务
crontab -e
2、mysql备份脚本
#遍历数据文件夹(找到我们需要备份的库)
for DATABASE in `ls -l /data/service/mysql/data | grep ^d | awk '{print $9}'`
do
#备份文件存储路径(docker内文件路径)
BACKUP_DIR=/data/service/mysql/dbbak/sql
#日记文件路径
LOGFILE=/data/service/mysql/dbbak/data_backup.log
#日期格式(作为文件名)
DATE=`date '+%Y%m%d-%H%M'`
#备份文件名
DUMPFILE=$DATABASE-$DATE.sql
#压缩文件名
ARCHIVE=$DATABASE-$DATE.sql.tgz
#5天前的时间,删除5天前的备份数据
DATE_5=`date -d "-5 day" +%Y%m%d`
#密码
PASSWD=123456
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ]; then
mkdir -p "$BACKUP_DIR"
fi
#开始备份之前,将备份信息头写入日记文件
echo " ">> $LOGFILE
echo "----------------------">> $LOGFILE
echo "BACKUP DATE:" $(date +"%Y-%m-%d %H:%M:%S") >> $LOGFILE
echo "----------------------">> $LOGFILE
#切换至备份目录
cd $BACKUP_DIR
#删除五天前的备份文件
rm -rf $DATABASE-$DATE_5*
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
docker exec -it mysql mysqldump --default-character-set=utf8mb4 -uslave_user -p$PASSWD > /$BACKUP_DIR/$DUMPFILE
#如果mysql是直接跑在宿主机上的用如下命令
#mysqldump --default-character-set=utf8mb4 -uslave_user -p$PASSWD > /$BACKUP_DIR/$DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo "Database [$DATABASE] Backup Fail!" >> $LOGFILE
#备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持
#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER
fi
#输出备份过程结束的提醒消息
echo "Backup Process Done"
done