【笔记】使用XtraBackup进行备份恢复

#!/bin/bash

# 配置变量
BACKUP_FILE="/root/docker/mysql8/backup/full/full-20240531114830.tar.gz" # 备份文件
MYSQL_DATA_DIR="/root/docker/mysql8-test/data"                           # MySQL 数据目录
MYSQL_CONTAINER_NAME="mysqltest"                                         # MySQL 容器名称
MYSQL_DOCKER_COMPOSE_DIR="/root/docker/mysql8-test"                      # 此处为MySQL的docker-compose up -d所在目录

# 检查是否以root身份运行
if [ "$(id -u)" != "0" ]; then
  echo "此脚本必须以root用户运行" 1>&2
  exit 1
fi

TEMP_DIR=$(mktemp -d)

# 解压备份文件
echo "解压备份文件"
tar -xzvf $BACKUP_FILE --strip-components=1 -C $TEMP_DIR

# 停止MySQL服务
echo "停止MySQL服务..."
set +e
docker stop $MYSQL_CONTAINER_NAME
set -e
# systemctl stop mysqld

# 检查 docker stop 命令的退出状态码
if [ $? -eq 0 ]; then
  # 等待几秒钟,以确保容器停止
  sleep 4

  # 再次检查容器是否已停止
  if ! docker ps | grep -q $MYSQL_CONTAINER_NAME; then
    echo "容器 $MYSQL_CONTAINER_NAME 已成功停止"
  else
    echo "mysql停止失败,请手动停止mysql"
    exit 1
  fi
else
  echo "容器 $MYSQL_CONTAINER_NAME 停止命令执行失败"
  exit 1
fi

# 解压缩
echo "解压缩..."
set +e
docker rm pxback-decompress
set -e
docker run --name pxback-decompress -v $TEMP_DIR:/backup -it --user root percona/percona-xtrabackup:8.2.0 /bin/bash -c "xtrabackup --decompress --target-dir=/backup"

# 准备备份
echo "准备备份..."
set +e
docker rm pxback-prepare
set -e
docker run --name pxback-prepare -v $TEMP_DIR:/backup -it --user root percona/percona-xtrabackup:8.2.0 /bin/bash -c "xtrabackup --prepare --target-dir=/backup"
# xtrabackup --prepare --target-dir=$TEMP_DIR

# 清空MySQL数据目录
echo "清空MySQL数据目录..."
rm -rf $MYSQL_DATA_DIR/*

# 恢复备份到MySQL数据目录
echo "恢复备份到MySQL数据目录..."
cp -r $TEMP_DIR/* $MYSQL_DATA_DIR/
rm -rf $TEMP_DIR

# 设置MySQL数据目录权限
# echo "设置MySQL数据目录权限..."
# chown -R $MYSQL_USER:$MYSQL_GROUP $MYSQL_DATA_DIR

# 启动MySQL服务
echo "启动MySQL服务..."
cd $MYSQL_DOCKER_COMPOSE_DIR
docker-compose up -d
# systemctl start mysqld

C_START=$(docker ps |grep $MYSQL_CONTAINER_NAME | head -1)

if [ -z "$C_START" ]; then
  echo "MySQL服务未成功启动,请手动重启mysql。" 1>&2
  exit 1
fi



  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值