麒麟在线

当前位置:网站首页 / 技术 / 正文

MySQL/MariaDB启动失败,提示:InnoDB: Missing MLOG_CHECKPOINT at 3265917829 between the checkpoint 326591782

MySQL解决服务器异常关闭导致坏表问题。

问题

上班启动服务,发现连接数据库异常,去服务器查看MySQL进程,发现MySQL启动失败。由于周末期间服务器异常关闭,查询日志发现InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint这个问题。

解决

执行查询命令,查找MySQL的配置文件路径

find / -name 'my.cnf'

常规情况下路径是 /etc/my.cnf

innodb_force_recovery选项

innodb_force_recovery是一个用于控制InnoDB恢复模式的配置选项。通过设置不同的值,可以控制MySQL在启动时对损坏的InnoDB表进行不同程度的恢复操作。这个选项的值范围从1到6,每个值都有不同的恢复级别和可能的风险。

  • innodb_force_recovery = 1:尝试恢复损坏的表,但不会执行任何写操作。

  • innodb_force_recovery = 2:尝试恢复损坏的表,并允许进行写操作,但会忽略一些可能导致错误的检查。

  • innodb_force_recovery = 3:尝试恢复损坏的表,并允许进行写操作,同时会忽略一些可能导致错误的检查和修复操作。

  • innodb_force_recovery = 4:允许对损坏的表进行更深入的恢复操作,但可能会导致数据丢失。

  • innodb_force_recovery = 5:允许对损坏的表进行更深入的恢复操作,并忽略更多的检查和修复操作,可能导致数据丢失。

  • innodb_force_recovery = 6:尝试进行最激进的恢复操作,几乎忽略所有的检查和修复操作,可能导致大量数据丢失。


在[mysqld]增加innodb_force_recovery=6,建议从1往6试,但一般情况下6才管用。

[mysqld]
innodb_force_recovery=6

启动MySQL即可。

如上操作MySQL是启动成功了,但是又出现新的错误,lost connections during query.

根据上述错误,发现是由于设置的innodb_force_recovery强制恢复设置导致,将设置注释。

将MySQL的data进行备份

mysqldump -u root -p --all-databases > all_databases.sql

或者直接把数据库目录物理备份,以防数据丢失或不可逆的操作。


然后删除ib_logfile0、ib_logfile1、ibdata1、*.ibd文件,重启MySQL成功,然后将之前备份的数据通过工具导入到数据库中。如果想偷懒,不重新导入也行~

推荐阅读

文章标签:

版权声明: 本文除特别说明外均由原创

本文链接: https://www.70ol.com/jishu/362.html,尊重共享,欢迎转载,请自觉添加本文链接,谢谢!

分享本文: 请填写您的分享代码。

呃 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。