建备份可执行命令文件
cd /usr/local/docker/mysql/backup
vim backup.sh
**backup.sh**
内容:
#! /bin/bash
#############定义变量###########################
#备份sql保存位置
BACKUP_DIR="/usr/local/docker/mysql/backup"
#LOG文件位置
LOG_FILE="/usr/local/docker/mysql/backup/backup.log"
DATE=`date +%Y-%m-%d_%H-%M`
USER="root"
PASSWORD="koyo49mysql@2022"
#数据库名,--all-databases 代表全部数据库
DATABASE="--all-databases"
#数据库备份文件名
SQL_FILE="backup_all_$DATE.sql"
#保存天数
KEEP_DAYS=15
# mysql容器名
DOCKER_TAG="mysql"
#############删除过期文件###########################
# 删除过期文件
DEL_FILE=`find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -exec ls {} \;`
for delfile in ${DEL_FILE}
do
rm -f $delfile
echo "$DATE----- $delfile delete success!" >> $LOG_FILE
done
echo "$DATE----- clear cache backup mysql file" >> $LOG_FILE
#############备份数据库###########################
if [ ! -d $BACKUP_DIR ];
then
mkdir -p "$BACKUP_DIR"
fi
cd $BACKUP_DIR
# 执行备份命令
docker exec -i $DOCKER_TAG mysqldump -u$USER -p$PASSWORD $DATABASE > $SQL_FILE
if [[ $? == 0 ]]; then
# 压缩SQL文件
tar czvf $SQL_FILE.gz $SQL_FILE
echo "$DATE----- $SQL_FILE.gz backup success!" >> $LOG_FILE
rm -f $SQL_FILE
else
echo "$DATE----- $SQL_FILE.gz backup fail!" >> $LOG_FILE
fi
创建定时任务
# 创建定时任务
crontab -e
# 设置定时任务,每天凌晨1点执行相关脚本
0 1 * * * sh /usr/local/docker/mysql/backup/backup.sh
# 查看定时任务
crontab -l
恢复数据
docker cp <sql文件位置> <容器name>:/
docker exec <容器name> sh -c 'exec mysql -u<用户名> -p<密码> -D<数据库> < <sql文件>'