【笔记】使用XtraBackup进行热备份

备份环境:

  1. 具备docker
  2. mysql8+(5.7及以下版本更换xtrabackup版本即可,具体版本号查看官网)
  3. 将云盘挂载到服务器上,可以使用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_DIR


set +e
echo "[$(date +'%F %T')] 开始全量备份" >> $LOG_FILE

# 容器名称
CONTAINER_NAME="pxback-full"

# 检查容器是否存在
echo "[$(date +'%F %T')] 检测容器是否存在" >> $LOG_FILE
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
    echo "[$(date +'%F %T')] 容器已存在,执行删除" >> $LOG_FILE
    docker rm ${CONTAINER_NAME} >> $LOG_FILE 2>&1
    echo "容器已删除." >> $LOG_FILE
fi

set -e

echo "执行备份操作" >> $LOG_FILE
docker run --name pxback-full -v $HOST_MYSQL_DATA_DIR:$MYSQL_DATA_DIR -v $HOST_BACKUP_DIR:$BACKUP_DIR --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
echo "备份文件已生成" >> $LOG_FILE
if [ $? -eq 0 ]; then
    cd $HOST_BACKUP_DIR
    echo "压缩备份" >> $LOG_FILE
    tar -czvf full-$DATETIME.tar.gz $DATETIME  >> $LOG_FILE 2>&1
    echo "删除原备份" >> $LOG_FILE
    rm -rf $HOST_BACKUP_DIR/$DATETIME  >> $LOG_FILE 2>&1
    echo "[$(date +'%F %T')] 将备份移入云盘" >> $LOG_FILE
    echo "复制压缩备份到云盘" >> $LOG_FILE
    cp full-$DATETIME.tar.gz $CLOUD_BACKUP_DIR
    echo "压缩备份已上传云盘" >> $LOG_FILE
    rm -f full-$DATETIME.tar.gz
    echo "[$(date +'%F %T')] 删除7天前的备份" >> $LOG_FILE
    find $CLOUD_BACKUP_DIR -type f -mtime +7 -exec rm -f {} \;
    echo "[$(date +'%F %T')] 全量备份成功" >> $LOG_FILE
else
    echo "[$(date +'%F %T')] Full backup failed" >> $LOG_FILE
    exit 1
fi




使用linux的定时任务每天凌晨进行备份
crontab -e进入定时任务编辑
在尾部换行追加定时任务
0 0 * * * sh /root/docker/mysql8/db-backup.sh

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值