XtraBackup 报错 unable to open innodb_redo/ib_redo read_logfile() failed 原因与解决
问题现象 使用 XtraBackup 对 MySQL 进行热备份时,出现如下报错,备份任务中断: [ERROR] [MY-011825] [Xtrabackup] unable to open /innodb_redo/ib_redo368 err 1504 [ERROR] [MY-011825] [Xtrabackup] read_logfile() failed 根本原因 XtraBackup 的工作机制 XtraBackup 热备的核心流程如下: 记录备份开始时的 LSN(Log Sequence Number) 拷贝 InnoDB 数据文件(此过程数据仍在变化) 后台持续监听并复制 redo log,确保能捕获备份期间所有数据变化 备份完成后,通过 --prepare 阶段对拷贝的数据做 crash recovery,使其达到一致性状态 第 3 步是问题的关键:XtraBackup 需要不间断地读取 redo log 文件。 MySQL 8.0.30 的 redo log 变更 MySQL 8.0.30 对 InnoDB redo log 做了重大架构调整: 对比项 8.0.30 之前 8.0.30 及之后 存储位置 datadir 根目录 #innodb_redo/ 子目录 文件名 ib_logfile0、ib_logfile1 #ib_redo<N>(活跃)、#ib_redo<N>_tmp(备用) 管理方式 固定 2 个文件,循环写入 多文件动态创建与回收 容量配置 innodb_log_file_size × 2 innodb_redo_log_capacity 新机制下,MySQL 会动态回收已经不再需要的 redo log 文件。在没有任何保护的情况下,XtraBackup 后台线程正在读取某个 #ib_redo<N> 文件时,MySQL 可能已将其回收,导致 XtraBackup 打开文件失败,从而报出 unable to open ... read_logfile() failed。 ...