MySQL使用xtrabackup进行完整备份与还原操作

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

本文演示了如何利用 Percona XtraBackup 工具对 MySQL 数据库执行完整的备份流程,并在另一台服务器上实现数据的完全还原。主要步骤包括:环境准备与依赖安装、配置具备特定权限的备份专用账户、生成压缩版全量备份文件、对备份集进行事务日志回放以保持一致性,最后在目标端清理旧数据并导入备份文件完成迁移。

环境准备与工具安装

在进行备份之前,需要确保服务器已安装 xtrabackup 及相关依赖。如果使用 RPM 包安装,通常需要安装 Perl 模块、Libaio 以及 Libev 等基础库。

1. 安装依赖与软件包

首先安装系统基础依赖:yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rsync。随后依次安装 libev4 和 percona-xtrabackup RPM 包。请根据实际操作系统版本选择合适的软件包路径。

配置备份专用账户

出于安全考虑,不建议直接使用 root 账号进行备份,而是创建一个具有特定权限的专用备份用户。该用户需要拥有 SELECT、RELOAD、PROCESS、SHOW DATABASES、SUPER、LOCK TABLES、REPLICATION CLIENT、SHOW VIEW 和 EVENT 权限。

2. 创建并授权备份用户

-- 创建用户并设置密码
CREATE USER 'backuper'@'localhost' IDENTIFIED BY 'backup@123';

-- 授予必要权限
GRANT SELECT, RELOAD, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT ON *.* TO 'backuper'@'localhost';

-- 刷新权限使配置生效
FLUSH PRIVILEGES;

执行全量备份

确认备份环境及账号后,即可执行全量备份。为避免占用过多磁盘空间,通常建议将备份数据打包为 tar 格式并进行 gzip 压缩。备份完成后,请务必检查命令的执行状态以确保备份成功。

3. 创建备份目录

新建一个专门用于存放备份文件的目录,例如:/export/mysql_backup/。

4. 运行备份命令

使用 innobackupex 命令连接 MySQL 实例并将输出流式传输到 tar 归档中,最后压缩保存。若从库备份需保留主库 binlog 信息用于同步重建,可添加 --slave_info --safe-slave-backup 参数;默认情况下,binlog 信息会记录在 xtrabackup_binlog_info 文件中。

# 注意替换实际的路径、端口、用户名和密码
innobackupex \
  --defaults-file="/export/servers/mysql/etc/my.cnf" \
  --host="localhost" \
  --port=3358 \
  --user="backuper" \
  --password="backup@123" \
  --socket="/export/data/mysql/tmp/mysql.sock" \
  --stream=tar \
  /export/mysql_backup/ | gzip > /export/mysql_backup/mysql_full_backup.tar.gz

备份文件解压与日志处理

备份结束后,将生成的压缩包传输至目标服务器的相同目录下。由于 xtrabackup 采用的是物理拷贝机制,为了保证数据的一致性,需要对备份集中的事务日志进行“回放”(Prepare)操作。

5. 解压与预处理备份集

建议在空白目录中解压,以免覆盖其他文件。解压后,使用 --apply-log 选项处理事务日志,这会重做已完成的事务并回滚未提交的事务。

cd /export/mysql_backup/
tar xvf mysql_full_backup.tar.gz

# 执行日志准备(Prepare),这会将备份转换为可直接恢复的状态
innobackupex --apply-log /export/mysql_backup/

目标服务器数据还原

在目标服务器上进行还原前,必须确保 MySQL 的数据目录是空的或已被移走。此外,xtrabackup 仅备份数据文件,不包含错误日志或慢查询日志等目录结构,因此还原后需手动补建这些目录。

6. 清理与迁移原数据目录

为防止误操作,先使用移动命令将现有的数据目录重命名作为临时备份:mv /export/data/mysql /export/data/mysql_bak。

7. 重建必要的子目录

手动创建 MySQL 运行时所需的子目录(如 tmp, data, log 等):

mkdir -p /export/data/mysql/tmp /export/data/mysql/data /export/data/mysql/log

8. 回退(Move-back)数据文件

使用 --move-back 参数将预处理好的备份文件移动至新的数据目录。也可以使用 --copy-back 进行复制操作。

innobackupex --defaults-file="/export/servers/mysql/etc/my.cnf" --move-back /export/mysql_backup/

9. 修改权限并启动服务

数据归位后,需要将所有文件的所有权修改为 MySQL 运行用户(通常为 mysql:mysql),否则数据库将无法读取数据。最后启动 MySQL 服务,登录数据库校验数据是否恢复完整。

# 递归修改文件所有者和所属组
chown -R mysql:mysql /export/data/mysql

# 启动 MySQL 服务
service mysqld start # 或 systemctl start mysqld
以上就是使用 xtrabackup 对 MySQL 进行备份与还原的详细内容,更多关于 MySQL 数据迁移和维护的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表