当前位置: 首页 > news >正文

MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)

MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)

1. 环境说明

  • OS: CentOS 7
  • MySQL: 5.7 或 8.0
  • 工具: Percona XtraBackup
  • 数据目录默认: /var/lib/mysql
  • 备份目录示例: /data/backup/mysql

2. 安装 XtraBackup

2.1 配置 MySQL 官方仓库(可选阿里云镜像)

# 安装基础依赖
yum install -y wget curl lsof# 下载仓库 rpm 包
wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm# 安装仓库
rpm -ivh percona-release-latest.noarch.rpm# 启用 Percona 仓库
percona-release setup ps57  # 适用于 MySQL 5.7

2.2 安装 XtraBackup

yum install -y percona-xtrabackup-80

安装后可验证版本:

xtrabackup --version

3. 生产环境备份配置

3.1 目录结构

/data/backup/mysql/
├── full/          # 全量备份
├── incremental/   # 增量备份
└── logs/          # 日志

3.2 脚本示例(每 5 分钟执行一次)

#!/bin/bash
USER="root"
PASS="Root@1234"
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d_%H%M)
FULL_RETENTION_DAYS=7
INC_RETENTION_DAYS=1mkdir -p $BACKUP_DIR/full $BACKUP_DIR/incremental $BACKUP_DIR/logs
LOG_FILE="$BACKUP_DIR/logs/backup_$(date +%Y%m%d).log"
exec >> $LOG_FILE 2>&1
echo "===== Backup Start: $(date) ====="# 清理过期备份
find $BACKUP_DIR/full/ -type d -mtime +$FULL_RETENTION_DAYS -exec rm -rf {} \;
find $BACKUP_DIR/incremental/ -type d -mtime +$INC_RETENTION_DAYS -exec rm -rf {} \;# 查找最新全量备份
LAST_FULL=$(ls -1d $BACKUP_DIR/full/* 2>/dev/null | sort | tail -n1)if [ -z "$LAST_FULL" ]; thenecho "[INFO] No full backup found, creating first full backup..."FULL_DIR=$BACKUP_DIR/full/$DATEmkdir -p $FULL_DIRxtrabackup --backup --target-dir=$FULL_DIR --user=$USER --password=$PASSxtrabackup --prepare --apply-log-only --target-dir=$FULL_DIRecho "[INFO] Full backup finished: $FULL_DIR"exit 0
fi# 每天凌晨 0 点自动生成全量备份
HOUR=$(date +%H)
if [ "$HOUR" -eq "00" ]; thenFULL_DIR=$BACKUP_DIR/full/$DATEmkdir -p $FULL_DIRecho "[INFO] Starting daily full backup..."xtrabackup --backup --target-dir=$FULL_DIR --user=$USER --password=$PASSxtrabackup --prepare --apply-log-only --target-dir=$FULL_DIRecho "[INFO] Daily full backup finished: $FULL_DIR"exit 0
fi# 增量备份
LAST_INC=$(ls -1d $BACKUP_DIR/incremental/* 2>/dev/null | sort | tail -n1)
if [ -z "$LAST_INC" ]; thenINC_BASE=$LAST_FULL
elseINC_BASE=$LAST_INC
fiINC_DIR=$BACKUP_DIR/incremental/$DATE
mkdir -p $INC_DIR
echo "[INFO] Starting incremental backup..."
xtrabackup --backup --target-dir=$INC_DIR --incremental-basedir=$INC_BASE --user=$USER --password=$PASS# 压缩增量备份
tar -czf ${INC_DIR}.tar.gz -C $BACKUP_DIR/incremental $(basename $INC_DIR)
rm -rf $INC_DIR
echo "[INFO] Incremental backup finished and compressed: ${INC_DIR}.tar.gz"
echo "===== Backup End: $(date) ====="

3.3 配置 cron

*/5 * * * * /bin/bash /usr/local/bin/mysql_backup_prod.sh

4. 恢复 MySQL 数据

4.1 停止 MySQL

systemctl stop mysqld

4.2 恢复全量备份

FULL_DIR=/data/backup/mysql/full/20251112_0000# Prepare 全量备份
xtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR# 清空 MySQL 数据目录
mv /var/lib/mysql /var/lib/mysql_old_$(date +%F_%H%M)
mkdir -p /var/lib/mysql# Copy-back
xtrabackup --copy-back --target-dir=$FULL_DIR
chown -R mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql

4.3 恢复增量备份(按顺序)

# 解压增量备份
cd /data/backup/mysql/incremental
for f in *.tar.gz; dotar -xzf $f
done# 按时间顺序应用增量
xtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR --incremental-dir=/data/backup/mysql/incremental/20251112_0100
xtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR --incremental-dir=/data/backup/mysql/incremental/20251112_0200

4.4 启动 MySQL

systemctl start mysqld# 检查数据库
mysql -uroot -p -e "SHOW DATABASES;"

5. 注意事项

  1. 增量备份必须按时间顺序恢复
  2. 数据目录权限必须为 mysql:mysql
  3. 全量备份必须先 --prepare
  4. 恢复前备份原数据目录,防止误操作
  5. 压缩增量备份必须先解压再 apply

6. 建议

  • 日志记录备份状态,方便排查问题
  • 生产环境建议每天凌晨全量备份,其他时间增量备份
  • 定期测试恢复流程,保证备份可用
http://www.dtcms.com/a/600750.html

相关文章:

  • 在k8s中seaweedfs中,weed 命令详细举例说明
  • 动易 网站统计 首次打开阿里云服务器学生
  • 【底层奥秘与性能艺术】让 RTOS 在 48 MHz MCU 上跑出 0.5 µs 上下文切换——一场从零开始的嵌入式“时间革命”
  • Win11找不到组策略编辑器(gpedit.msc)
  • [智能体设计模式]第2章-路由(Route)
  • [智能体设计模式] 第五章 :函数调用
  • PixPin(截图工具) v2.2.0.0
  • 2023年混沌学堂JAVA课程(1-7期)+专题课
  • 备战算法专家--要点 1
  • 湖南服装网站建设东方财富网官方网站首页
  • 物业网站建设方案开发一个直播app
  • 设计模式实战篇(一):彻底搞懂 Singleton 单例模式
  • 什么是电子商务网站建设网站建设的一些背景图片
  • 一个有 IP 的服务端监听了某个端口,那么他的 TCP 最大链接数是多少
  • K8s常用排障调试工具 入侵排查 kubectl debug 命令详解
  • yield(放弃优先权)
  • 基于MATLAB的噪声图像处理方案
  • 做动态logo网站做网站有底薪吗
  • C语言编译器最新版 | 全面提升性能与兼容性
  • 厦门网站建设建设公司免费动漫软件app下载大全
  • 开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)
  • springBoot (springCloud2025)集成redisCluster 集群
  • Redis在Windows上测试运行Memurai
  • windows ubuntu双系统下卸载ubuntu
  • 零基础入门C语言之C语言实现数据结构之双向链表
  • 初次接触 LoRA 技术
  • 西安哪家网站公司做的比较好做网页制作的价格
  • 【OpenCV + VS 】图像通道分离与合并
  • 【超分辨率专题】HYPIR:扩散模型先验与 GAN 对抗训练相结合的新型图像复原框架
  • 【ZeroRange WebRTC】kvsWebrtcClientMaster 获取 ICE 服务器配置解析