MySQL因performance_schema.innodb_redo_log_files崩溃重启求助
MySQL重启后持续崩溃:InnoDB断言失败(dict0dict.cc:3498)与performance_schema表异常
故障现象
- 此前运行正常的MySQL,重启后陷入持续自动重启循环
- 启动时添加
--innodb_force_recovery=2及以上级别参数,可正常访问数据库 - 通过
mysql.server start --general_log=1 --general_log_file=/tmp/mysql_output.log开启通用日志后发现:进程尝试创建performance_schema.innodb_redo_log_files表时,触发InnoDB断言失败(报错位置为dict0dict.cc:3498),随后收到signal 6导致崩溃,进而触发重启循环 - 已完成全量数据库备份,但无法读取
performance_schema.innodb_redo_log_files表:执行DESCRIBE innodb_redo_log_files;可返回表结构,但执行查询操作时提示表不存在
排查与修复方案
1. 临时关闭performance_schema加载
修改MySQL配置文件(my.cnf或my.ini),添加以下配置项:
performance_schema = OFF
保存配置后尝试正常启动MySQL,若能成功启动,再针对性排查performance_schema的异常问题。
2. 重建performance_schema表空间
若临时关闭performance_schema后启动正常,可按以下步骤重建:
- 停止MySQL服务
- 删除MySQL数据目录下的
performance_schema文件夹(该目录下为performance_schema的表空间文件) - 修改配置文件恢复
performance_schema = ON,启动MySQL服务,系统会自动重建performance_schema的所有表
3. 修复InnoDB数据字典损坏
由于断言失败发生在InnoDB字典模块(dict0dict.cc),说明数据字典可能存在损坏:
- 保持
--innodb_force_recovery=2启动状态,导出所有数据库(已备份可跳过) - 停止MySQL服务,删除InnoDB系统表空间文件(通常为
ibdata1、ib_logfile0、ib_logfile1) - 执行
mysqld --initialize-insecure重新初始化MySQL(此操作会重置root密码,需提前记录或后续重置) - 重新启动MySQL并导入之前备份的数据
4. 版本兼容性调整
部分MySQL版本在performance_schema.innodb_redo_log_files表的创建逻辑上存在已知bug,可尝试:
- 升级至当前版本分支的最新稳定版
- 回退到之前确认运行正常的MySQL版本
内容的提问来源于stack exchange,提问作者Bankzilla
相关产品推荐
相关产品推荐

