故障分析 | MySQL 无法启动,提示 missing……

咖啡续命
• 阅读 1208
作者:姚远
专注于 Oracle、MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6,5.7,8.0 OCP。现在鼎甲科技任顾问,为同事和客户提供数据库培训和技术支持服务。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

故障描述

MySQL 数据库服务器的 CPU 和主板都换了,重新开机,发现 MySQL 无法启动!!!

提示:
Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint .... and ...

故障分析

这个问题出现在 MySQL 5.7 之后的版本,主要的原因是 MySQL 会在最新的 checkpoint 完成后都会在 redo log 写一个一字节的 MLOG_CHECKPOINT 标记,用来标记在此之前的 redo 都已 checkpoint 完成。如果处于任何原因没有找到这个标记,那么整个 redo log 文件都会被忽略。出现这个错误的话,最好是有备份进行恢复,如果没有做好备份,那只能采取非常规的启动方式,但可能造成数据丢失。

故障处理

移除当前使用的 redo log 文件,然后可以试着启动数据库,结果启动失败!

提示:
[ERROR] InnoDB: Page [page id: space=0, page number=0] log sequence number 178377412422 is in the future! Current system log sequence number 165909011496.

这样的错误,这是因为 MySQL writer 线程按照配置的时间间隔以 page 为单位刷新 buffer 数据到磁盘。当数据刷新到磁盘的时候,新写入磁盘的 page 包含了较新的 LSN,此时系统 system 表空间头的 LSN 并没有同步更新,通常这是检查点线程的工作。在正常的崩溃恢复中,MySQL 可以借助 redo log 来进行前滚和回滚,但是此时 redo log 已经被我们删掉了,MySQL 无法进行恢复操作。此时,我们设置 innodb_force_recovery=3 来强制启动 MySQL,仍然启动不成功,改成 4 后启动了!
再使用 mysqldump 导出备份,结果噩梦又降临了!MySQL 又 crash 了。

提示:
InnDB: Failed to find tablespace for table......

设置参数 innodb_force_recovery=5,数据库仍然启动失败,再设置成 6,启动成功!用 sqldump 顺利把数据备份出来了!
再初始化数据库,把刚刚备份的数据库导入,数据库恢复成功完成!

参数说明

这里的关键是设置 innodb_force_recovery 参数,对应这个参数的说明如下:

  1. SRV_FORCE_IGNORE_CORRUPT:忽略检查到的 corrupt 页;
  2. SRV_FORCE_NO_BACKGROUND:阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash;
  3. SRV_FORCE_NO_TRX_UNDO:不执行事务回滚操作;
  4. SRV_FORCE_NO_IBUF_MERGE:不执行插入缓冲的合并操作;
  5. SRV_FORCE_NO_UNDO_LOG_SCAN:不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交;
  6. SRV_FORCE_NO_LOG_REDO:不执行前滚的操作。
点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
4年前
MySQL 如何使用 PV 和 PVC?
本节演示如何为MySQL数据库提供持久化存储,步骤为:1.创建PV和PVC。2.部署MySQL。3.向MySQL添加数据。4.模拟节点宕机故障,Kubernetes将MySQL自动迁移到其他节点。5.验证数据一致性。首先创建PV和PVC,配置如下
Wesley13 Wesley13
4年前
mysql实践一:SQL基础
mysql简介mysql是有名的开放源代码关系型数据库。它最早是AB公司开源的,后来到Sun公司手中。之后Sun公司被Oracle公司收购,mysql就归Oracle所有。从此mysql走向商业化,又有名为mariadb数据库作为mysql的分支被开源,之后mysql又出了社区版和企业版。mysql大致的历史就这样,更详细的可以百度,这里
Wesley13 Wesley13
4年前
MySQL的未来在哪?
_摘要:_ 阿里云MySQL&MariaDB数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化,从Sun到Oracle,发展也经过了几个阶段。阿里云MySQL&MariaDB数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数
Stella981 Stella981
4年前
HTML5新增input标签属性
一.inputtype属性1<formaction""2邮箱<inputtype"email"name""id""<inputtype"submit"value"提交"<br/<br/3手机号码<inputtype"tel"name
Stella981 Stella981
4年前
Neo4j 的一些使用心得
<divclass"htmledit\_views"id"content\_views"<p<br</p<p<spanstyle"color:rgb(70,70,70);fontfamily:simsun;fontsize:14px;lineheight:21px;"由对图数据的处理需求,看到了图数据库(GraphData
Wesley13 Wesley13
4年前
2014新炬实习岗位招聘
2014新炬实习岗位招聘Oracle工程师/初级DBA岗位职责:1、日常维护、故障处理,保障系统的健康稳定运行;2、快速响应用户需求,提供数据库技术支持;3、书写技术文档,总结工作经验和故障处理方案。岗位要求:1、本科或以上学历优秀应届生,计算机或相关专业,喜爱数据库技术者;2、熟系数据库体系结构;3、熟悉oracle的
子桓 子桓
2年前
DBeaverEE Mac版
DBeaverEE一款功能强大的数据库管理工具,它支持多种数据库管理系统,包括MySQL、PostgreSQL、Oracle、SQLServer、SQLite等。DBeaverEE是DBeaver的企业版,提供了更多高级功能和技术支持。DBeaverEE具
绣鸾 绣鸾
2年前
DBeaverEE for Mac(数据库管理工具) v23.2.4
是一款功能强大的数据库管理工具,支持多种数据库类型,包括MySQL、Oracle、PostgreSQL等。它是DBeaver社区版的商业版本,在社区版的基础上增加了更多高级特性和技术支持。DBeaverEE提供了直观易用的用户界面,可以轻松地连接到不同的数
云数据库MySQL多人协同开发实践
随着云计算技术的快速发展,云数据库作为云计算的重要组成部分,为企业提供了高效、灵活和可靠的数据存储和管理服务。其中,MySQL作为一款流行的开源关系型数据库,在云数据库领域具有广泛的应用。多人协同开发是软件开发过程中的重要环节,本文将探讨云数据库MySQL多人协同开发的实践。