1.新建脚本
vi mysql_backup.sh
2.脚本内容
#!/bin/bash
#================基础参数===============
#数据库用户名称
user="root"
#数据库密码
password="123456"
#ip
hostname="127.0.0.1"
#备份库名列表,多个数据库空格隔开
db_name_array="aams-base aams-business"
#备份位置(若不存在,会自动创建)
datafile_path="/usr/local/docker/mysql_backup/"
#是否删除.sql文件(包含子目录): ON开启,其他字符不开启
rf_switch="ON"
#数据保留天数(按文件修改时间计算)
expire_day=7
#时间格式
date=`date '+%Y%m%d-%H%M'`
#================非开发人员勿改================
#备份最终路径
bak_path="${datafile_path}"
#日志文件名称
mysql_log="${bak_path}/mysql_$(date +%Y%m%d_%H%M%S).log"
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d "$bak_path" ]
then
mkdir -p ${bak_path}
fi
#判断mysql是否开启,开始备份之前,将备份信息头写入日记文件
if [[ "$(docker images -q mysql)" != "" ]];
then
echo "---------------- mysql 已启动 ----------------" >> $mysql_log
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $mysql_log
echo "----------------------------------------------" >> $mysql_log
else
echo "---------------- mysql 未启动 ----------------" >> $mysql_log
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $mysql_log
echo "----------------------------------------------" >> $mysql_log
fi
#切换至备份目录
cd $bak_path
#执行备份
for db_name in $db_name_array
do
echo "choose" $db_name >> $mysql_log
#备份文件
dumpfile=$db_name$'_'$(date +%Y%m%d_%H%M%S).sql
#压缩文件
archive=$db_name$'_'$(date +%Y%m%d_%H%M%S).sql.zip
docker exec mysql mysqldump -h$hostname -u$user -p$password $db_name > $dumpfile
#判断数据库备份是否成功
if [ $? -eq 0 ]; then
#创建备份文件的压缩包
zip -r $archive $dumpfile
#输入备份成功的消息到日记文件
echo "[$archive] Backup Successful!" >> $mysql_log
#删除原始备份文件,只需保留数据库备份文件的压缩包即可
rm -f $dumpfile
else
echo "Database Backup Fail!" >> $mysql_log
fi
done
#删除过期文件
if [ $rf_switch == "ON" ]
then
find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f
find ${bak_path} -name "*.log" -mtime +${expire_day} | xargs rm -f
fi
3.脚本赋权
chmod +x mysql_backup.sh
4.执行脚本
./mysql_backup.sh
5.定时执行
1. 查看定时任务: crontab -l
2. 编辑定时任务: crontab -e
#可以先用这个测试,每一分钟执行一次。
*/1 * * * * cd /data/mysql/backup && ./mysql_backup.sh
#每天凌晨1点执行
0 1 * * * cd /usr/local/docker/mysql_backup && ./mysql_backup.sh