删 ib_logfile* 是唯一解,因 mysql 8.0 彻底弃用旧版 redo log 格式,校验失败即硬性拒绝启动,无法通过参数兼容、升级命令或强制恢复绕过。

升级后 MySQL 启动失败,报 Unsupported redo log format (0),说明旧版 Redo Log 文件与 8.0 不兼容,必须清除,不能跳过或绕过。
为什么删 ib_logfile0 和 ib_logfile1 是唯一解
MySQL 5.6/5.7 的 Redo Log 格式(尤其是 pre-5.7.9 创建的)被 8.0 彻底弃用。错误日志里那句 Unsupported redo log format (0) 不是警告,是硬性拒绝加载——InnoDB 初始化直接失败,后续所有模块(包括数据字典)都无法启动。
你无法通过配置参数“兼容”它,也无法用 mysqld --upgrade 或 mysql_upgrade 修复,因为 Redo Log 是存储引擎层最底层的物理日志,不经过 SQL 层。
- 别尝试
innodb_force_recovery:它对格式不兼容无效,只会卡在更早阶段 - 别改
innodb_log_file_size:8.0 启动时会校验现有文件头,大小不匹配照样报错 - 别指望自动迁移:MySQL 不提供跨大版本 Redo Log 格式转换工具
删哪些文件?顺序和范围必须严格
不是只删 ib_logfile0 和 ib_logfile1 就完事。8.0 要求整个 Redo Log 文件集干净,否则仍可能报 redo log file size mismatch。
- 进入你的
datadir目录(查SELECT @@datadir;或my.cnf中datadir配置) - 删除所有以
ib_logfile开头的文件:ib_logfile0、ib_logfile1、ib_logfile2……全部 - 如果目录下存在
#innodb_redo/子目录(8.0.30+ 动态 Redo Log),也一并清空(但注意:这不是 5.6→8.0 升级时该有的目录,出现说明之前已运行过 8.0.30+,此时需同步清理) - 确认没有残留的
ib_logfile*文件,ls -l ib_logfile*应返回 “No such file”
删完不重启等于白删,但重启前必须确认两件事
删完文件只是第一步,MySQL 启动时会重新生成 Redo Log,但如果配置或环境不对,依然失败。
- 检查
my.cnf是否还残留旧 Redo 参数:如innodb_log_file_size或innodb_log_files_in_group。8.0.30+ 已弃用它们,若存在且值与默认不一致,会导致启动拒绝。建议注释掉这两行 - 确认
innodb_redo_log_capacity没被意外设置(除非你明确要动态 Redo)。8.0.30+ 默认启用动态 Redo,若你删的是旧日志但配置了该参数,MySQL 会尝试初始化#innodb_redo目录,而该目录若不存在或权限不对,又会报错 - 启动命令必须带用户权限:用
sudo systemctl start mysql或sudo mysqld_safe --user=mysql &,确保进程能写入datadir
启动成功后第一件事:验证并重置 root 密码
8.0 初始化时会生成临时密码,且认证插件已变为 caching_sha2_password。即使你能连上,大概率会因插件不匹配被拒。
- 查临时密码:
sudo grep 'temporary password' /var/log/mysqld.log - 登录:
mysql -u root -p,粘贴临时密码 - 立刻改密并换插件(尤其如果你的应用用老驱动):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass'; - 别漏掉
root@127.0.0.1—— 这是另一个独立账号,应用常用这个 host 连接
Redo Log 格式不兼容问题看似简单,但容易在“删文件”环节误删其他关键文件(如 ibdata1),或忽略配置残留导致反复失败。核心就一条:只动 ib_logfile*,不动数据文件,不碰系统表,删完即启,启后速配认证。











