percona xtrabackup 2.4 与 mysql 8.0 存在根本性不兼容,因后者引入数据字典迁移、redo/undo 日志格式变更及 gtid 逻辑调整,导致 2.4 版本启动即报错退出;必须使用 percona-xtrabackup-80(如 8.0.7),且需卸载旧包、清理残留、启用正确仓库并验证版本号含“8.0.x”及“based on mysql 8.0.x”。

Percona XtraBackup 2.4 无法备份 MySQL 8.0,不是配置问题,也不是权限或参数写错——是根本性不兼容,强行使用会直接报错退出。
Percona XtraBackup 2.4 报错:MySQL 8.0 不被支持
Percona XtraBackup 2.4 的代码未适配 MySQL 8.0 引入的底层变更,包括:
- 数据字典从 MyISAM 表迁移到 InnoDB 内部字典表(
mysql.ibd+mysql.data_dictionary) - 重做日志(
ib_logfile0)格式和 LSN 记录方式调整 - 撤销表空间(
undo_001)默认独立且可动态管理 - GTID 和 binlog 位点记录逻辑变化,
xtrabackup_binlog_info生成规则不同
执行时典型错误:
Error: MySQL 8.0 and Percona Server 8.0 are not supported by Percona Xtrabackup 2.4.x series. Please use Percona Xtrabackup 8.0.x for backups and restores.
这个提示不是警告,是硬拦截——程序启动阶段就拒绝继续。
必须用 percona-xtrabackup-80 包,而非 percona-xtrabackup-24
CentOS/RHEL 系统上,两个包不能共存,安装前需清理旧版本:
- 卸载旧包:
yum remove percona-xtrabackup-24 - 清理残留:
rm -rf /usr/bin/xtrabackup /usr/bin/innobackupex(后者在 8.0 中已废弃) - 启用 Percona tools 仓库:
percona-release enable-only tools release - 安装正确版本:
yum install percona-xtrabackup-80
验证是否生效:
$ xtrabackup --version xtrabackup version 8.0.7 based on MySQL server 8.0.33 Linux (x86_64) (revision id: 5a9e3b7)
注意:版本号末尾必须含 8.0.x,且明确标注基于 MySQL 8.0.x,否则仍是伪装的 2.4。
xtrabackup 8.0 命令行为有实质性变化
-
innobackupex已完全移除,所有操作统一走xtrabackup二进制 -
--slave-info仍可用,但生成的xtrabackup_slave_info中 GTID 格式更严格,恢复后show master status显示的Executed_Gtid_Set是准确的(这点比 2.4 强) -
--compress默认使用zstd(非qpress),若要启用需提前装zstd:yum install zstd -
--prepare阶段对 undo 表空间处理更激进,若备份时数据库正在高并发写入,建议加--use-memory=2G避免 OOM
常见误用:
- 仍写
innobackupex --backup ...→ 报错command not found - 备份命令漏掉
--defaults-file,导致读不到innodb_data_home_dir等关键路径 → 找不到ibdata1 - 恢复时没清空
datadir或没chown -R mysql:mysql→ 启动失败,错误日志里出现InnoDB: Operating system error number 13
MySQL 8.0 的备份链路一旦选错工具版本,后续所有恢复、主从重建、GTID 对齐都会出隐性偏差。最危险的是:有些 2.4 的备份看似“成功生成文件”,但 --prepare 阶段静默跳过关键校验,恢复后数据字典不一致,表能查但 information_schema 元数据缺失——这种损坏往往在故障切换时才暴露。











