必须删除datadir下所有ib_logfile*及#innodb_redo目录,注释废弃参数innodb_log_file_size和innodb_log_files_in_group,确保仅配置innodb_redo_log_capacity且目录可写,再重启mysql。

MySQL 8.0 启动报 InnoDB: Error: log file ./ib_logfile0 is of different size 怎么办
删光所有 ib_logfile* 是唯一有效操作,改配置、加参数、设 recovery 模式都无效。错误不是警告,是 InnoDB 初始化阶段硬性 abort —— 日志文件头里记录的大小和 innodb_log_file_size 配置值不一致,直接拒绝加载,连数据字典都不会初始化。
删哪些文件?顺序和范围不能错
必须进 datadir(查 SELECT @@datadir; 或看 my.cnf),执行:
-
rm ib_logfile*—— 不只是ib_logfile0和ib_logfile1,所有匹配的都要清空 - 如果存在
#innodb_redo/目录(说明已运行过 8.0.30+),也一并rm -rf #innodb_redo - 删完后跑
ls ib_logfile*,应返回No such file;ls #innodb_redo同理
删完重启前必须检查三件事
否则照样启动失败:
-
my.cnf中注释或删除innodb_log_file_size和innodb_log_files_in_group—— 8.0.30+ 已弃用,留着会触发Unknown variable错误 - 确认没设置
innodb_redo_log_capacity以外的 Redo 相关变量;若设了该参数,要确保#innodb_redo/目录可写且属主为mysql - 用
sudo systemctl start mysql或sudo mysqld_safe --user=mysql &启动,避免权限不足导致日志文件创建失败
为什么不能跳过删文件直接改配置
因为 InnoDB 启动时读取的是磁盘上真实文件的 header,不是配置值。哪怕你把 innodb_log_file_size 改成 128M,只要磁盘上还躺着两个 48MB 的 ib_logfile*,它就会校验失败并退出。这不是兼容性问题,是物理结构不匹配 —— 就像拿 USB-C 线插 Micro-USB 口,接口对不上就是对不上。











