六十八、【Linux数据库】percona软件介绍 、 innobackupex备份与恢复

发布于:2025-08-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

XtraBackup架构全景图

核心流程
热备份
Redo日志
LSN跟踪
InnoDB引擎
XtraBackup
一致性保证
增量基础
全量备份
MySQL实例
增量备份
备份存储
云存储
本地存储
磁带库

Percona 软件与 XtraBackup 功能概述

Percona 软件介绍

Percona 是一家提供 MySQL 相关软件和服务的公司,其核心产品包括:

  1. Percona Server:增强版 MySQL 服务器,提供更好的性能和扩展性
  2. Percona XtraBackup:开源热备份工具,支持 InnoDB/XtraDB 存储引擎
  3. Percona Toolkit:高级命令行工具集,用于管理 MySQL
  4. Percona Monitoring and Management (PMM):监控和管理平台

XtraBackup 核心功能

  1. 热备份:在备份期间不影响数据库读写操作
  2. 增量备份:仅备份自上次备份以来更改的数据
  3. 流压缩:备份时直接压缩数据
  4. 并行备份:多线程加速备份过程
  5. 加密备份:保护备份数据安全

备份恢复流程

全量备份
增量备份1
增量备份2
准备备份
恢复数据

演示步骤

1. 安装 Percona XtraBackup

# 安装Percona仓库
[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y

# 启用仓库
[root@localhost ~]# percona-release enable-only tools release

# 安装XtraBackup
[root@localhost ~]# yum install percona-xtrabackup-80 -y

2. 全量备份

# 创建备份目录
[root@localhost ~]# mkdir -p /backup/full

# 执行全量备份
[root@localhost ~]# xtrabackup --backup --target-dir=/backup/full --user=root --password=your_password

# 查看备份文件
[root@localhost ~]# ls /backup/full
ibdata1  mysql  performance_schema  sys  test  xtrabackup_binlog_info  xtrabackup_checkpoints

3. 增量备份

# 创建增量备份目录
[root@localhost ~]# mkdir /backup/inc1

# 基于全量备份执行增量备份
[root@localhost ~]# xtrabackup --backup --target-dir=/backup/inc1 \
    --incremental-basedir=/backup/full \
    --user=root --password=your_password

4. 准备备份(恢复前)

# 应用全量备份日志
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/full

# 应用增量备份到全量
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/full \
    --incremental-dir=/backup/inc1

# 最终准备
[root@localhost ~]# xtrabackup --prepare --target-dir=/backup/full

5. 恢复数据

# 停止MySQL服务
[root@localhost ~]# systemctl stop mysqld

# 清空数据目录(生产环境请先备份)
[root@localhost ~]# rm -rf /var/lib/mysql/*

# 恢复备份
[root@localhost ~]# xtrabackup --copy-back --target-dir=/backup/full

# 修改数据目录权限
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql

# 启动MySQL服务
[root@localhost ~]# systemctl start mysqld

6. 验证恢复

# 登录MySQL检查数据
[root@localhost ~]# mysql -u root -p -e "SHOW DATABASES;"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+

命令总结表格

演示命令 功能描述 关键参数
yum install percona-xtrabackup-80 安装XtraBackup 软件包名称
xtrabackup --backup --target-dir=/path 全量备份 --target-dir 备份目录
xtrabackup --backup --target-dir=/inc --incremental-basedir=/full 增量备份 --incremental-basedir 基础目录
xtrabackup --prepare --apply-log-only --target-dir=/full 准备全量备份 --apply-log-only 仅应用日志
xtrabackup --prepare --target-dir=/full --incremental-dir=/inc 合并增量备份 --incremental-dir 增量目录
xtrabackup --prepare --target-dir=/full 最终准备
xtrabackup --copy-back --target-dir=/full 恢复备份 --copy-back 恢复模式
chown -R mysql:mysql /var/lib/mysql 修复权限 数据目录
systemctl stop mysqld 停止服务
systemctl start mysqld 启动服务

功能作用详解

1. XtraBackup 工作原理

备份过程

  1. 复制InnoDB数据文件(物理拷贝)
  2. 备份期间监控redo日志变化
  3. 锁定MyISAM表(非InnoDB)进行一致性备份
  4. 保存备份点日志位置

恢复过程

  1. 应用redo日志前滚事务
  2. 回滚未提交事务
  3. 恢复非InnoDB表

2. 增量备份原理

全量备份
增量备份1
增量备份2
准备备份
恢复
  • LSN(Log Sequence Number):每个InnoDB页的日志序列号
  • 增量备份只拷贝LSN大于基础备份LSN的页

3. 高级备份选项

压缩备份

xtrabackup --backup --compress --target-dir=/backup/compressed

加密备份

xtrabackup --backup --encrypt=AES256 --encrypt-key="your_encryption_key" --target-dir=/backup/encrypted

并行处理

xtrabackup --backup --parallel=4 --target-dir=/backup/parallel

流式备份

xtrabackup --backup --stream=xbstream | gzip > backup.xb.gz

4. 生产环境实践

备份策略

# 每周日全量备份
0 2 * * 0 /usr/bin/xtrabackup --backup --target-dir=/backup/full_$(date +\%F)

# 每日增量备份
0 2 * * 1-6 /usr/bin/xtrabackup --backup --incremental-basedir=/backup/last_full --target-dir=/backup/inc_$(date +\%F)

备份验证

# 创建测试实例
xtrabackup --prepare --target-dir=/backup/full
mysqld --no-defaults --datadir=/backup/full --socket=/tmp/test.sock

# 运行一致性检查
pt-table-checksum --socket=/tmp/test.sock

网站公告

今日签到

点亮在社区的每一天
去签到