问题现象
MySQL服务无法启动,找到MySQL安装目录下的error.log
日志文件,发现有如下报错(以下报错内容已删除时间信息):
1 | [ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 4081619513 and the end 4081620530. |
问题分析
1.分析日志
报错日志最开始是missing MLOG_CHECKPOINT
,可能是某些记录文件损坏导致启动MySQL服务失败。
2.搜索相关问题处理方法
经过搜索关键词MySQL missing MLOG_CHECKPOINT
,找到如下相关解决方案:
- MySQL Server shuts down frequently and won’t start again now
- mysql报错Ignoring the redo log due to missing MLOG_CHECKPOINT between
- InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT
解决方案
通过阅读以上解决方案,最终确定使用删除实例下的ib_logfile*
文件(与error.log应该在同一目录下),我这删除的是ib_logfile0
和ib_logfile1
文件,然后重启MySQL服务。
重启后MySQL服务可正常使用,但是在error.log
日志中出现以下报错(以下报错内容已删除时间信息):
1 | ... |
根据日志提示,访问:https://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html
(发现有中文翻译版)
打开是MySQL官方提供的解决方案,大意是两种处理方式
- 可以启动服务的情况下,使用
SELECT ... INTO OUTFILE
导出数据,再进行数据恢复- 不可以启动服务的情况下,通过修改
my.ini
或my.cnf
配置文件中的innodb_force_recovery
配置来启动服务,再进行数据导出和恢复。
中心思想就是先把服务启动起来,再导出数据后重新导入数据。
那么现在MySQL服务可以启动,就这样做:
- 导出数据库的SQL脚本
- 删除数据库
- 导入步骤1的数据库SQL脚本
以上操作,不涉及MySQL服务相关的表,例如:
information_schema
mysql
performance_schema
sys
出于安全起见,建议恢复后立即备份数据,并导入到新实例中。