物理备份工具XtraBackup怎么备份数据

一、执行备份操作

xtrabackup --default-file=/data/mysql/conf/my.cnf -u'ccj' -p'ccj1' --backup --target-dir=/root/alldata/ --socket=/tmp/mysql.sock

二、备份数据分析 

XtraBackup备份过程中会生成多个文件,这些文件在备份和恢复过程中起着重要的作用。以下是这些文件的内容和功能说明:

xtrabackup_binlog_info

  • 内容:记录备份完成时的binlog文件名和位点。

  • 功能:用于在恢复备份后,确定从哪个binlog位点开始进行增量恢复。

xtrabackup_binlog_pos_innodb

  • 内容:记录InnoDB的binlog位点信息。

  • 功能:与xtrabackup_binlog_info类似,但更侧重于InnoDB相关的binlog信息。

xtrabackup_checkpoints

  • 内容:记录备份的类型(如全量备份或增量备份)和LSN(日志序列号)信息。

  • 功能:用于确定备份的范围和状态,以便在恢复时能够正确地应用日志。

xtrabackup_info

  • 内容:记录备份的详细信息,包括备份时间、备份方式、备份目录等。

  • 功能:提供备份的元数据信息,方便在恢复时了解备份的背景和配置。

xtrabackup_logfile

  • 内容:保存备份过程中拷贝的redo log。

  • 功能:在准备备份阶段,用于将数据文件恢复到备份结束时的一致性状态。

xtrabackup_slave_info

  • 内容:如果备份的是从库,该文件会记录主节点的位点信息,包括Relay_Master_Log_File和Exec_Master_Log_Pos。

  • 功能:用于在恢复备份后,设置从库的复制位点。

backup-my.cnf

  • 内容:记录了一些InnoDB引擎的参数,如innodb_data_home_dir、innodb_data_file_path等。

  • 功能:在准备备份阶段,这些参数会被用来正确地恢复InnoDB数据文件。

三、把备份传到目标机器 

scp -r /root/alldata/ 101.201.246.223:/root/alldata/

四、执行 prepare 操作

xtrabackup --prepare --target-dir=/root/alldata

五、清空目标实例 

/etc/init.d/mysql.server stop
cd /data/mysql
mkdir /data/mysql_bak
mv /data/mysql/data/ /data/mysql_bak/
mv /data/mysql/binlog/ /data/mysql_bak/
mv /data/mysql/log/ /data/mysql_bak/
mkdir /data/mysql/log
touch /data/mysql/log/mysql.err
chown -R mysql:mysql /data/mysql

六、恢复数据并启动MySQL

xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=/root/alldata

chown -R mysql:mysql /data/mysql
/etc/init.d/mysql.server start

七、压缩备份和恢复

xtrabackup --default-file=/data/mysql/conf/my.cnf -u'ccj' -p'ccj1' --backup --compress --target-dir=/root/alldata_compress/ --socket=/tmp/mysql.sock

scp -r /root/alldata_compress/ 101.201.246.223:/root/alldata_compress/
  • 安装qpress

 qpress下载地址

wget https://github.com/PierreLvx/qpress/archive/refs/tags/20230507.zip
yum install unzip
unzip qpress-20230507.zip
cd qpress-20230507
sudo yum groupinstall "Development Tools"
sudo yum install gcc-c++
make
make install

qpress -v
  • 解压
xtrabackup --decompress --target-dir=/root/alldata_compress/
  • prepare 
xtrabackup --prepare --target-dir=/root/alldata_compress/
  • 停止目标MySQL实例
​/etc/init.d/mysql.server stop
cd /data/mysql
mkdir /data/mysql_bak
mv /data/mysql/data/ /data/mysql_bak/
mv /data/mysql/binlog/ /data/mysql_bak/
mv /data/mysql/log/ /data/mysql_bak/
mkdir /data/mysql/log
touch /data/mysql/log/mysql.err
chown -R mysql:mysql /data/mysql
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=/root/alldata_compress/

chown -R mysql:mysql /data/mysql
/etc/init.d/mysql.server start

八、定时备份脚本

#!/bin/bash

# 备份目录
BACKUP_DIR="/data/mysql_bak"
# 当前时间戳
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 备份目标目录
TARGET_DIR="${BACKUP_DIR}/bak_${TIMESTAMP}"
# xtrabackup 配置文件路径
CONFIG_FILE="/data/mysql/conf/my.cnf"
# MySQL 用户名和密码
MYSQL_USER="ccj"
MYSQL_PASSWORD="ccj1"
# MySQL 套接字文件路径
SOCKET="/tmp/mysql.sock"

# 创建备份目录
mkdir -p "${TARGET_DIR}"

# 执行备份
xtrabackup \
  --defaults-file="${CONFIG_FILE}" \
  --user="${MYSQL_USER}" \
  --password="${MYSQL_PASSWORD}" \
  --backup \
  --compress \
  --target-dir="${TARGET_DIR}" \
  --socket="${SOCKET}"

# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "备份成功: ${TARGET_DIR}"
else
  echo "备份失败"
  exit 1
fi

# 删除 3 天前的备份目录
find "${BACKUP_DIR}" -maxdepth 1 -name "bak_*" -type d -mtime +3 -exec rm -rf {} \;
echo "已删除 3 天前的备份目录"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值