通过xtrabackup做数据迁移

avatar 2026年5月8日17:41:54 评论 1 次浏览

#### 一、背景说明

在 MySQL 升级过程中,从 5.7 升级到 8.0 是一个常见但风险较高的操作。尤其在生产环境中,大数据量数据库如果使用逻辑备份(mysqldump)会导致:

  • 迁移时间长

  • 锁表风险高

  • 恢复不可控

因此,本文采用 Percona XtraBackup 物理备份方案 实现低停机迁移.

二、适用场景

适用于以下情况:

  • MySQL 5.7 → MySQL 8.0 升级

  • 数据量较大(GB ~ TB级)

  • 需要低停机迁移

  • 允许短暂停写窗口

  • 使用 InnoDB 引擎为主

三、CentOS / RHEL(yum 安装)

如何离线环境可以在本地下载离线包,然后在远程上安装即可.针对5.7版本和8.0版本的不一样,根据自己的版本选择相应的包安装.

 安装 Percona 官方源
 yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
 启用 XtraBackup 仓库
 MySQL 5.7(XtraBackup 2.4)
 percona-release enable tools release
 安装 XtraBackup
 yum install -y percona-xtrabackup-24
  验证安装
 xtrabackup --version
 
 安装 Percona 8.0 工具链
 percona-release setup ps80
  安装 XtraBackup 8.0
 yum install -y percona-xtrabackup-80
  验证
 xtrabackup --version

四、数据备份(核心步骤)

数据备份主要是针对xtrabackup的用法,这里不管是5.7版本的还是8.0版本的,使用方法是一样的.

 1️⃣ 执行全量备份
 xtrabackup \
 --user=root \
 --password='******' \
 --backup \
 --target-dir=/data/backup/full_2026
 2️⃣ prepare 备份
 xtrabackup --prepare --target-dir=/data/backup/full_2026
 3️⃣ 校验备份文件
 ls -lh /data/backup/full_2026

确保包含:

  • ibdata1

  • *.ibd

  • xtrabackup_checkpoints

六、恢复到 MySQL

还原也是一样的,把备份的文件copy到目标节点,然后恢复数据,自动会写到数据库的数据目录里,然后赋予权限,启动即可,这样数据就同步过来了

 1️⃣ 停止 MySQL 8.0
 systemctl stop mysqld
 2️⃣ 清理数据目录
 ⚠️ 确保是新库环境
 rm -rf /var/lib/mysql/*
 3️⃣ 恢复数据
 xtrabackup \
 --copy-back \
 --target-dir=/data/backup/full_2026
 4️⃣ 修复权限
 chown -R mysql:mysql /var/lib/mysql

针对数据迁移主要是用在主从,或者同步场景,使用xtrabackup进行同步和备份还原比较适合,而且针对binlog同步或者GTID同步都是不错的选择.

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: