记一次服务器宕机后MySQL无法启动的解决过程

机房停电,重启服务器后发现 MySQL 无法启动。

报错内容

1
[ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint

表示 MySQL 在启动时检测到 redo 日志中缺少了一个检查点记录,这通常发生在非正常关机后。

解决方法

  1. 备份 data 目录
  2. my.ini 中添加:
1
2
[mysqld]
innodb_force_recovery=3
innodb_force_recovery

这个选项的目的是在数据库发生严重故障时绕过某些恢复步骤,使数据库能够启动。这个选项的值可以设置为1到6之间的整数,每个级别都会忽略更多的错误和恢复步骤

1:忽略所有corrupt页

2:阻止Master Thread,清理操作由Purge Thread执行

3:不进行事务回滚

4:不进行插入缓冲合并操作

5:不查看重做日志,即不进行前滚操作

6:不进行undo操作

遇到关于redo日志文件的问题,尝试设置innodb_force_recovery=3或更高的值可能会帮助数据库启动,因为它会跳过一些redo日志的处理。但是,这也会导致未提交的事务被保留,可能会影响数据的一致性。

  1. 启动MySQL。如果仍然启动不成功,则每次对 innodb_force_recovery + 1,提高恢复级别再次重启。
  2. 使用 mysqldump 导出备份。
  3. 关闭 MySQL 服务。
  4. 删除 innodb_force_recovery 配置,删除data目录下的内容,记得先备份。
  5. 重新初始化MySQL:
1
mysqld --initialize --console
  1. 从备份恢复。