备份环境:
- 具备docker
- mysql8+(5.7及以下版本更换xtrabackup版本即可,具体版本号查看官网)
- 将云盘挂载到服务器上,可以使用s3协议
#!/bin/bash# 目录配置部分
HOST_BACKUP_DIR="/root/docker/mysql8/backup/full" # 宿主机备份目录
HOST_LOG_DIR="/root/docker/mysql8/backup/logs" # 宿主机日志目录
HOST_MYSQL_DATA_DIR="/root/docker/mysql8/data" # 宿主机MySQL 数据目录
CLOUD_BACKUP_DIR="/mnt/qn-iptudou-backup" # 云盘备份目录# mysql连接配置
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PWD="12345678"# docker容器内的目录配置,可以不修改
DATETIME=$(date +'%Y%m%d%H%M%S') # 当前日期
MYSQL_DATA_DIR="/var/lib/mysql" # MySQL 数据目录
BACKUP_DIR="/backup/full" # 备份存储目录
LOG_FILE="$HOST_LOG_DIR/backup-$DATETIME.log" # 日志文件# 创建备份目录
mkdir -p $HOST_MYSQL_DATA_DIR
mkdir -p $HOST_LOG_DIR
mkdir -p $HOST_BACKUP_DIRecho "[$(date +'%F %T')] 开始全量备份" >> $LOG_FILE
docker rm pxback-full >> $LOG_FILE 2>&1
docker run --name pxback-full -v $HOST_MYSQL_DATA_DIR:$MYSQL_DATA_DIR -v $HOST_BACKUP_DIR:$BACKUP_DIR -it --user root percona/percona-xtrabackup:8.0.34 /bin/bash -c "xtrabackup --backup --datadir=$MYSQL_DATA_DIR --target-dir=$BACKUP_DIR/$DATETIME --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USER --password=$MYSQL_PWD --compress" >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; thencd $HOST_BACKUP_DIRtar -czvf full-$DATETIME.tar.gz $DATETIME >> $LOG_FILE 2>&1rm -rf $HOST_BACKUP_DIR/$DATETIME >> $LOG_FILE 2>&1echo "[$(date +'%F %T')] 将备份移入云盘" >> $LOG_FILEcp full-$DATETIME.tar.gz $CLOUD_BACKUP_DIRrm -f full-$DATETIME.tar.gzecho "[$(date +'%F %T')] 删除7天前的备份" >> $LOG_FILEfind $CLOUD_BACKUP_DIR -type f -mtime +7 -exec rm -f {} \;echo "[$(date +'%F %T')] 全量备份成功" >> $LOG_FILE
elseecho "[$(date +'%F %T')] Full backup failed" >> $LOG_FILEexit 1
fi
使用linux的定时任务每天凌晨进行备份
crontab -e
进入定时任务编辑
在尾部换行追加定时任务
0 0 * * * sh /root/docker/mysql8/db-backup.sh