记一次服务器宕机后MySQL无法启动的解决过程
机房停电,重启服务器后发现 MySQL 无法启动。
报错内容
1 | [ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint |
表示 MySQL 在启动时检测到 redo 日志中缺少了一个检查点记录,这通常发生在非正常关机后。
解决方法
- 备份 data 目录
- 在
my.ini
中添加:
1 | [mysqld] |
innodb_force_recovery
这个选项的目的是在数据库发生严重故障时绕过某些恢复步骤,使数据库能够启动。这个选项的值可以设置为1到6之间的整数,每个级别都会忽略更多的错误和恢复步骤
1:忽略所有corrupt页
2:阻止Master Thread,清理操作由Purge Thread执行
3:不进行事务回滚
4:不进行插入缓冲合并操作
5:不查看重做日志,即不进行前滚操作
6:不进行undo操作
遇到关于redo日志文件的问题,尝试设置innodb_force_recovery=3
或更高的值可能会帮助数据库启动,因为它会跳过一些redo日志的处理。但是,这也会导致未提交的事务被保留,可能会影响数据的一致性。
- 启动MySQL。如果仍然启动不成功,则每次对
innodb_force_recovery
+ 1,提高恢复级别再次重启。 - 使用 mysqldump 导出备份。
- 关闭 MySQL 服务。
- 删除
innodb_force_recovery
配置,删除data目录下的内容,记得先备份。 - 重新初始化MySQL:
1 | mysqld --initialize --console |
- 从备份恢复。