GreatSQL社区

搜索

chongzh

MySQL ib_logfile current_lsn < page_lsn 导致一查询就崩,如何恢复

chongzh 已有 487 次阅读2024-4-1 08:47 |个人分类:Mysql 原理|系统分类:运维实战

问题描述

MySQL 5.7.21 业务表无法访问,select 业务表直接导致mysql crash,errorlog 里记录 [ERROR] InnoDB: Page [page id: space=49, page number=3] log sequence number 89266322606 is in the future! Current system log sequence number 89266322472.

此处为个人环境模拟复现的错误日志
2024-03-28T20:07:50.690100+08:00 0 [ERROR] InnoDB: Page [page id: space=49, page number=3] log sequence number 89266322606 is in the future! Current system log sequence number 89266322472.
2024-03-28T20:07:50.690140+08:00 0 [ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html for information about forcing recovery.

查看5.7.21源码:

当 ib_logfile 中记录的 current_lsn < 数据页 page_lsn,报如下错误 Page [page id: space=49, page number=3] log sequence number 89266322606 is in the future! Current system log sequence number 89266322472.

造成该错误的原因:您的数据库可能已损坏,或者您可能已经复制了InnoDB表空间,但没有复制InnoDB日志文件。

可能触发的几个场景:

表数据访问不了,有什么特殊解决办法?

既然是  ib_logfile 中记录的 current_lsn 数据页 page_lsn


查询 current_lsn ,直至满足 current_lsn > 数据页 page_lsn
mysql -uroot -e 'SHOW ENGINE INNODB STATUS;' \
| sed 's/\\n/\n/g' \
| grep '^Log sequence'

推进current_lsn > 数据页 page_lsn后,数据访问恢复正常。


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-12-4 19:46 , Processed in 0.015687 second(s), 10 queries , Redis On.
返回顶部