记一次血淋淋的MySQL崩溃修复案例

摘要:今天给大家带来一篇MySQL数据库崩溃的修复案例

问题描述

研究MySQL源代码,调试并压测MySQL源代码时,MySQL崩溃了!问题是它竟然崩溃了!而且还损坏了InnoDB文件!!还好是在调试环境下发生的,赶紧看看如何解决这个问题,经过一系列的查阅资料、验证、对比、MySQL源码调试跟踪、修复损坏的InnoDB文件、总结等流程,整理成此文,如果以后真的发生在线上的生产坏境,也不用担心是不是要跑路的问题了,可以分分钟搞定MySQL的崩溃问题了!!查看错误日志,如下:

问题分析

从日志中可以看出是innodb引擎出了问题。日志里提示到 在mysql的配置文件my.cnf里找到 [mysqld]字段下,添加 innodb_force_recovery=1:

如果innodb_force_recovery = 1不生效,则可尝试2——6几个数字

然后重启mysql,重启成功。然后使用mysqldump或 pma 导出数据,执行修复操作等。修复完成后,把该参数注释掉,还原默认值0。

配置文件的参数:innodb_force_recovery

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward),当不能进行有效的恢复操作时,mysql有可能无法启动,并记录错误日志;

innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

  • (SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
  • (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
  • (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
  • (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
  • (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
  • (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

解决方案

一般修复方法参考:

建立一张新表:

把数据导进去

删除掉原表:

注释掉 innodb_force_recovery 之后,重启。

重命名:

最后改回存储引擎:

另一个方法是使用mysqldump将表格导出,然后再导回到InnoDB表中。这两种方法的结果是相同的。
备份导出(包括结构和数据):

还原方法1:

还原方法2(系统命令行):

注意,CHECK TABLE命令在InnoDB数据库中基本上是没有用的。

1、配置my.cnf

配置innodb_force_recovery = 1或2——6几个数字,重启MySQL

2、导出数据脚本

导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。

注意:必须成功备份此处的数据。然后删除原始数据库中的数据。

[En]

Note: the data here must be backed up successfully. Then delete the data in the original database.

3、删除ib_logfile0、ib_logfile1、ibdata1

备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除

4、配置my.cnf

将my.cnf中innodb_force_recovery = 1或2——6几个数字这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务

5、将数据导入MySQL数据库

使用该方法应注意的问题:

[En]

Problems that should be paid attention to in this method:

  • ib_logfile0、ib_logfile1、ibdata1这三个文件一定要先备份后删除;
  • 确保原始数据导出成功
    [En]

    make sure that the original data is exported successfully*

  • 当数据导出成功后,删除原数据库中的数据时,如果提示不能删除,可在命令行进入MySQL的数据目录,手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件,前提是数据一定导出或备份成功。

Original: https://www.cnblogs.com/huaweiyun/p/16629980.html
Author: 华为云开发者联盟
Title: 记一次血淋淋的MySQL崩溃修复案例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504932/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用mybatis-plus转换枚举值

    1. 使用mybatis-plus转换枚举值 枚举值转换方式有很多,有以下方式: 后端写一个通用方法,只要前端传枚举类型,后端返回相应的枚举值前端去匹配 优点:能够实时保持数据一致…

    数据库 2023年6月11日
    0150
  • win7连接远程桌面提示身份验证错误函数不受支持

    win7连接远程桌面提示身份验证错误。要求的函数不受支持怎么办,下面的方法介绍了如何解决这个问题。 工具/原料 电脑 win7系统 方法/步骤 win+R 打开运行,输入&#822…

    数据库 2023年6月9日
    079
  • Mysql_范式入门

    MySQL 三大范式 为什么需要数据规范化 信息重复 更新异常 插入异常 无法正常显示信息 删除异常 丢失有效的信息 设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据…

    数据库 2023年6月11日
    088
  • PHP array_reduce()

    array_reduce array_reduce() 将回调函数 callback 迭代地作用到 array 数组中的每一个单元中,从而将数组简化为单一的值。 示例一: 示例二:…

    数据库 2023年6月14日
    092
  • 2022-8-17 mysql 第三天

    子查询 按照结果集的行列数不同,子查询可以分为以下几类: 标量子查询:结果集只有一行一列(单行子查询) 列子查询:结果集有一列多行 行子查询:结果集有一行多列 表子查询:结果集多行…

    数据库 2023年6月14日
    076
  • rsync

    rsync rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。 rsync…

    数据库 2023年6月14日
    077
  • MySQL函数学习(四)—–聚合函数

    注:笔记旨在记录 四、MySQL 聚合函数 \ 函 数 名 称 作 用 完 成 1 MAX 求最大值 勾 2 MIN 求最小值 勾 3 COUNT 求数量 勾 4 BIT_COUN…

    数据库 2023年6月16日
    079
  • day44-反射03

    Java反射03 3.通过反射获取类的结构信息 3.1java.lang.Class类 getName:获取全类名 getSimpleName:获取简单类名 getFields:获…

    数据库 2023年6月11日
    075
  • 应用层

    应用层 应用层概述 应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。 早期基于文本的应用(电子邮件、远程登录、文件传输、新闻组…

    数据库 2023年6月9日
    084
  • mysql约束

    一、表约束 PK主键约束(索引)唯一约束 非空 默认值 在关系数据库,一个表中,只能有一个主键(Primary Key),有些数据库没有pk,系统报出错误。 在myql数据库,建立…

    数据库 2023年6月9日
    083
  • 软件测试基础理论(2)

    一, 为什么要进行软件测试 为了通过软件&amp…

    数据库 2023年6月16日
    087
  • CentOS服务器的网络配置与部署

    1.系统安装与软件安装 1.1选择CentOs7.9release版本用作所研发系统部署服务器,官网以及所选择镜像为地址为:http://ftp.sjtu.edu.cn/cento…

    数据库 2023年6月6日
    087
  • 删除我的电脑设备和驱动器下迅雷云盘、百度网盘、WPS云盘、腾讯视频等标识

    使用 win+R键打开运行窗口,输入 regedit进入注册表编辑器,找到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Current…

    数据库 2023年6月16日
    0238
  • 数据库

    建库操作 #创建数据库(默认字符集编码) create database test20210420 #创建数据库的时候指定字符集编码以及字符校验规则 create database…

    数据库 2023年6月16日
    0119
  • 2022-8-20 数据库连接池

    1. 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初&#x59CB…

    数据库 2023年6月14日
    0118
  • MySQL 回表

    MySQL 回表 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。 一、简述 回表,顾名思义就是回到表中,也就是先通过普通索引扫描出数据所在的行,再通过行主键ID 取出索引中未包含…

    数据库 2023年5月24日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球