MySQL 8.0.30+ 的 redo log 路径硬编码为 datadir/#innodb_redo/,无法通过 innodb_log_group_home_dir 指定;若需落于 NVMe,唯一可行方案是将 datadir/#innodb_redo 用符号链接指向 NVMe 分区,并确保权限、SELinux/AppArmor 及挂载参数(noatime,nobarrier,discard)配置正确。

不能靠配置参数把 Redo Log “指”到另一块盘上——MySQL 8.0.30+ 之后,路径已硬编码为 datadir/#innodb_redo/,innodb_log_group_home_dir 完全失效。
MySQL 8.0.30+:唯一合法路径是 datadir/#innodb_redo/,必须用符号链接“骗过”InnoDB
你改 innodb_log_group_home_dir 没用,启动时会直接忽略并报 [MY-013869] Ignored deprecated configuration parameter。想让 Redo Log 落在 NVMe 上,只有两个可落地的方案:
- 把整个
datadir迁到 NVMe 盘(不现实:数据文件体积大、迁移风险高) - 保留
datadir在 SATA SSD 或 HDD 上,但用符号链接把datadir/#innodb_redo指向 NVMe 分区(推荐,隔离性好、操作可控)
实操要点:
- 先停库:
systemctl stop mysql,再确认无残留进程:ps aux | grep mysql - 创建目标目录(如
/nvme/mysql-redo),并确保属主为mysql:mysql - 删除旧日志目录:
rm -rf /var/lib/mysql/#innodb_redo(注意不是ib_logfile*) - 建立链接:
ln -s /nvme/mysql-redo /var/lib/mysql/#innodb_redo - 挂载
/nvme时务必加noatime,nobarrier,且启用 TRIM(discard) - 启动前验证链接可读写:
sudo -u mysql touch /var/lib/mysql/#innodb_redo/test
MySQL 8.0.29 及更早:必须停库删文件 + 改配置,不能“热迁移”
这个版本还支持 innodb_log_group_home_dir,但规则极严:任何“只改配置不删旧文件”的操作都会导致启动失败,报错典型为 InnoDB: Error: log file ./ib_logfile0 is of different size。这是因为 InnoDB 启动时会对每个 ib_logfile* 做 LSN、checksum 和 size 的三重校验。
安全流程只有四步,缺一不可:
- 执行
SET GLOBAL innodb_fast_shutdown = 0(确保所有脏页刷盘) -
systemctl stop mysql,再ps aux | grep mysql确认无残留 - 手动删除全部
ib_logfile*(路径由datadir决定,常见为/var/lib/mysql/ib_logfile0和/var/lib/mysql/ib_logfile1) - 修改配置文件,明确写死:
innodb_log_group_home_dir = /nvme/mysql-redo/,并配好innodb_log_file_size(如1G)
注意:innodb_log_files_in_group 默认是 2,不要轻易改;若设为 3 或 4,需同步删掉对应数量的旧文件,否则仍校验失败。
验证 Redo Log 是否真落在独立磁盘上
光看配置没用,必须查运行时状态:
- 登录 MySQL 执行:
SELECT @@innodb_redo_log_capacity;(8.0.30+ 才有该变量) - 查物理路径:
SELECT * FROM performance_schema.innodb_redo_log_files;,重点看FILE_NAME是否在#innodb_redo/下,且SIZE_IN_BYTES接近总容量 ÷ 32 - 在 OS 层验证:
ls -l /var/lib/mysql/#innodb_redo,确认是符号链接,且指向/nvme分区 - 用
iostat -x 1观察写入压力是否集中在 NVMe 设备(如nvme0n1),而非主datadir所在盘
容易被忽略的一点:SELinux 或 AppArmor 可能拦截符号链接访问。如果 MySQL 启动后日志里出现 Permission denied 但路径看起来都对,先临时禁用 SELinux 测试(setenforce 0),确认是策略问题再针对性放行。


















