阿里云docker mysql 备份

35 阅读1分钟

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

image.png 4.执行脚本

./mysql_backup.sh

image.png

image.png

5.定时执行

1. 查看定时任务: crontab -l

2. 编辑定时任务: crontab -e
#可以先用这个测试,每一分钟执行一次。
*/1 * * * * cd /data/mysql/backup && ./mysql_backup.sh

image.png

#每天凌晨1点执行
0 1 * * * cd /usr/local/docker/mysql_backup && ./mysql_backup.sh

image.png