MySQL 8.0 备份恢复必须使用 Percona XtraBackup 8.0 版本,2.4 版本不支持 MySQL 8.0 的 redo log 格式。操作前需确认数据库用户拥有 BACKUP_ADMIN 权限,并确保备份目录磁盘空间充足。
先说结论:MySQL 8.0 环境必须配套使用 XtraBackup 8.0,且需严格处理权限与日志应用步骤。
- 适合:MySQL 8.0 InnoDB 引擎的热备份场景
- 先看:确认 xtrabackup 版本与 MySQL 版本匹配,检查用户权限
- 建议:恢复后执行 chown 修正文件归属,检查错误日志
命令速用版
# 全量备份
xtrabackup `--backup` `--target-dir`=/data/backup/full `--user`=root `--password`=your_password
# 准备恢复(应用日志)
xtrabackup `--prepare` `--target-dir`=/data/backup/full
# 恢复数据
xtrabackup `--copy-back` `--target-dir`=/data/backup/full为什么会这样
XtraBackup 通过复制物理文件实现热备份,MySQL 8.0 改变了 redo log 格式导致旧版工具无法解析。备份过程中工具会锁定表结构片刻并持续跟踪数据页变化,确保数据一致性。
分步处理
1. 安装匹配版本
下载 Percona XtraBackup 8.0 安装包,不要使用 2.4 版本。公开资料中没有看到可靠的量化数据表明特定小版本差异,建议跟随 MySQL 8.0 大版本选择对应工具。
2. 执行备份
运行备份命令,指定目标目录。确保运行用户有读取数据库文件权限。
3. 准备恢复
使用 `--prepare` 参数应用事务日志。此步骤不可跳过,否则数据无法启动。
4. 复制回数据目录
使用 `--copy-back` 将文件放回 var/lib/mysql。操作需 root 权限。
5. 修正权限
恢复后的文件归属可能变为 root,需改回 mysql 用户。
怎么验证是否生效
启动 MySQL 服务,查看 error log 确认无 InnoDB 报错。登录数据库执行 SELECT 查询业务表,确认数据完整。
常见坑
版本不匹配会导致备份失败或恢复后无法启动。copy-back 后忘记修改文件所有者会导致 MySQL 无法启动。备份期间磁盘空间不足会导致备份中断。
常见问题
XtraBackup 2.4 能备份 MySQL 8.0 吗
不能。MySQL 8.0 redo log 格式变更,2.4 版本无法识别,必须使用 8.0 版本工具。
备份需要多少磁盘空间
至少需要等同于数据目录大小的空间。公开资料中没有看到可靠的量化数据表明压缩比例,建议预留 1.5 倍余量。
恢复后 MySQL 启动失败怎么办
检查数据目录文件归属是否为 mysql 用户,查看 error log 确认是否有权限拒绝或日志错误。
参考来源
Percona XtraBackup 8.0 Documentation, Introduction and Compatibility, https://docs.percona.com/percona-xtrabackup/8.0/en/