在 CentOS/RHEL 上使用 Percona XtraBackup 备份与恢复 MySQL

小林子
小林子
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍在 CentOS/RHEL 系统中安装 Percona XtraBackup 的方法,以及如何利用 innobackupex 工具对 MySQL 数据库进行全量备份、增量备份和还原操作,涵盖权限配置、参数设置及关键注意事项。

环境准备与安装

在进行备份之前,首先需要在服务器上安装 Percona 的软件仓库及客户端工具。推荐使用 yum 包管理器进行自动化安装,以确保依赖关系的正确性。

第1步:添加 Percona 软件源

可以通过直接下载 rpm 包或手动编辑 repo 文件两种方式将源添加到系统。以下采用自动安装方式:

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

执行后,如果提示 Retrieving... 并完成安装(显示 1:percona-release########################################### [100%]),则说明源已添加成功。若需手动配置,可在 /etc/yum.repos.d/ 下添加相应的配置文件,确保 baseurl 路径正确且 gpgcheck 开启。

第2步:验证安装源并安装工具

使用以下命令查看当前可安装的 Percona 相关软件包:

yum list | grep percona

确认列表中出现 xtrabackup 及相关组件后,运行安装:

yum install -y percona-xtrabackup

安装完成后,可通过 innobackupex --version 检查版本信息,确认工具已就绪。

全量备份操作

MySQL 全量备份会将整个数据库的数据拷贝到一个目录中。为了避免在生产环境中直接使用 root 账号备份,建议创建一个拥有最低权限的专用备份账号。

第3步:创建专用备份账号(可选)

登录 MySQL,执行以下 SQL 语句创建用户并授予最小必要权限(reload, lock tables, replication client):

grant user 'bkpuser'@'localhost' identified by 'password';
grant reload,lock tables,replication client on *.* to 'bkpuser'@'localhost';
flush privileges;

其中,sock=/tmp/mysql.sock 用于指定套接字文件路径(仅本机备份时需要);defaults-file= 指向 MySQL 的配置文件,通常位于 /etc/my.cnf 或 /usr/local/mysql/my.cnf。

第4步:执行全量备份

选择目标目录(例如 /backup/full),执行 innobackupex 命令:

innobackupex --user=bkpuser --password='password' --socket=/tmp/mysql.sock /backup/full

注意:命令执行成功后,会在终端末尾输出 completed OK!,同时目标目录下会生成一个以时间戳命名的子文件夹,里面包含完整的备份数据。

增量备份策略

增量备份基于上一次备份的状态,只记录变化的数据块。这需要建立在全量备份的基础上。

第5步:第一次增量备份

假设上述全量备份存放于 /backup/full 的最新文件夹中。执行第一次增量备份到 /backup/inc1:

innobackupex --user=bkpuser --password='password' --incremental /backup/inc1 --incremental-basedir=/backup/full/2023-10-01_xxxx

--incremental-basedir 必须指向最近一次备份(这里是全量备份)所在的目录。

第6步:第二次增量备份

以此类推,在进行第二次增量备份时,其基准目录应为上一次增量备份的目标目录:

innobackupex --user=bkpuser --password='password' --incremental /backup/inc2 --incremental-basedir=/backup/inc1/2023-10-02_xxxx

通过这种方式,可以保持数据库处于连续的一致性状态,同时减少每次备份所需的时间。

数据还原与恢复

Percona XtraBackup 的备份数据不能直接启动数据库使用,必须先经过“准备(Prepare)”阶段,即重放已提交事务并回滚未提交事务。

第7步:合并增量并准备数据

如果有多个增量备份,需要先应用所有增量备份到全量备份中,最后再进行一次 prepare。为加快处理速度,可以使用 --use-memory 分配更多内存:

innobackupex --apply-log --redo-only /backup/full/xxxx  # 先应用之前的增量(不包含最后一次)
# ...(此处省略中间多次应用的逻辑,实际操作中需按顺序一一应用)...

# 最后对所有数据进行准备(包含最后一次增量的回滚)
innobackupex --apply-log /backup/full/xxxx

如果在单一步骤中进行全量+增量的一体化准备(简化版),命令如下:

innobackupex --apply-log --use-memory=4G /path/to/the/latest-backup-dir

警告:执行此步骤前,请务必确认备份目录内有正确的文件结构。准备过程中日志会输出 Transaction log of xxx (scramble...) is applied. 直至结束。

第8步:复制数据到 MySQL 数据目录

在 MySQL 服务停止的状态下,将准备好的数据拷贝回 MySQL 的数据目录。默认通常是 /var/lib/mysql,请根据你的 my.cnf 配置调整:

service mysqld stop
innobackupex --copy-back --defaults-file=/etc/my.cnf /path/to/backup/dir

重要提示:

  • 空目录要求:--copy-back 操作要求目标数据目录下没有任何现有文件或文件夹。如果是新服务器,这通常不是问题;如果是生产环境覆盖,请务必备份原有数据以防万一。
  • 权限修复:数据拷贝完毕后,必须修改文件所有者和组为 mysql 用户,以便数据库能够正常读取:
chown -R mysql:mysql /var/lib/mysql

随后重启 MySQL 服务即可正常使用备份数据:

service mysqld start

总结

使用 Percona XtraBackup 进行数据库备份相比传统 mysqldump 具有非阻塞、速度快等优势。掌握全量与增量备份的结合应用,配合正确的 --prepare 流程,可以有效保障企业级 MySQL 数据的安全性与快速恢复能力。

以上就是 Percona XtraBackup 安装、全量/增量备份与还原的详细流程,更多关于数据库高可用与运维的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。