在 CentOS/RHEL 上使用 Percona XtraBackup 备份与恢复 MySQL
本文详细介绍在 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 安装、全量/增量备份与还原的详细流程,更多关于数据库高可用与运维的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













