mysql 强制InnoDB恢复innodb_force_recovery详解

 更新时间:2026年07月29日 09:20:29   作者:yangydq  
MySQL5.7中若InnoDB数据页面损坏导致崩溃,可通过设置innodb_force_recovery参数强制启动并导出数据,本文详解6个恢复级别的使用,教你安全使用SELECT INTO OUTFILE转储表,避免永久性数据文件损坏

mysql5.7 强制 InnoDB 恢复

要调查数据库页面损坏,您可以使用 SELECT … INTO OUTFILE. 通常,通过这种方式获得的大部分数据都是完整的。严重的损坏可能导致语句或 后台操作意外退出或断言,甚至导致 前滚恢复崩溃。在这种情况下,您可以使用该 选项来强制启动存储引擎,同时阻止后台操作运行,以便您可以转储表。例如,您可以在重新启动服务器之前将以下行添加到选项文件的部分:

[mysqld]
innodb_force_recovery = 1

有关使用选项文件的信息,请参阅 第 4.2.2.2 节,“使用选项文件”。

警告
仅innodb_force_recovery 在紧急情况下设置为大于 0 的值,以便您可以启动InnoDB和转
储您的表。在这样做之前,请确保您拥有数据库的备份副本,以防需要重新创建它。4 或
更大的值可能会永久损坏数据文件。仅 innodb_force_recovery在您在数据库的单独物理副
本上成功测试设置后,才能在生产服务器实例上使用 4 或更高的设置。强制InnoDB恢复
时,您应该始终从该值开始, innodb_force_recovery=1并且只在必要时逐步增加该值。

innodb_force_recovery默认为0(正常启动,不强制恢复)。允许的非零值为 innodb_force_recovery1 到 6。较大的值包括较小值的功能。例如,值 3 包括值 1 和 2 的所有功能。

如果您能够以 innodb_force_recovery 3 或更小的值转储您的表,那么您相对安全,只有损坏的单个页面上的一些数据会丢失。4 或更大的值被认为是危险的,因为数据文件可能会永久损坏。值 6 被认为是极端的,因为数据库页面处于过时状态,这反过来可能会给B 树 和其他数据库结构带来更多损坏。

作为安全措施,InnoDB防止 INSERT、 UPDATE、 或 大于 0DELETE时的操作 。只读模式下 4 位或更多位的设置。

1 (SRV_FORCE_IGNORE_CORRUPT)

让服务器即使检测到损坏的 页面也能运行。尝试 跳过损坏的索引记录和页面,这有助于转储表。 SELECT * FROM tbl_name

2 (SRV_FORCE_NO_BACKGROUND)

阻止主线程和任何清除线程运行。如果在清除操作期间发生意外退出,此恢复值会阻止它。

3 (SRV_FORCE_NO_TRX_UNDO)

崩溃恢复后 不运行事务 回滚。

4 (SRV_FORCE_NO_IBUF_MERGE)

防止插入缓冲区合并操作。如果它们会导致崩溃,请不要这样做。不计算表 统计信息。此值可能会永久损坏数据文件。使用此值后,准备删除并重新创建所有二级索引。设置 InnoDB为只读。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

启动数据库时 不查看撤消日志InnoDB:甚至将不完整的事务视为已提交。此值可能会永久损坏数据文件。设置InnoDB为只读。

6 (SRV_FORCE_NO_LOG_REDO)

不执行与恢复相关的重做日志 前滚。此值可能会永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会给 B 树和其他数据库结构带来更多损坏。设置 InnoDB为只读。

您可以SELECT从表中转储它们。innodb_force_recovery值为 3 或更少时,您可以或 DROP表格 CREATE。DROP TABLE也支持 innodb_force_recovery大于 3 的值,直到 MySQL 5.7.17。从 MySQL 5.7.18 开始, DROP TABLE不允许使用 innodb_force_recovery大于 4 的值。

如果您知道给定表导致回滚时意外退出,则可以将其删除。如果遇到由于批量导入失败而导致的失控回滚ALTER TABLE,您可以终止 mysqld 进程并设置 innodb_force_recovery为 3在不回滚的情况下启动数据库,然后DROP是导致失控回滚的表。

如果表数据中的损坏阻止您转储整个表内容,则带有子句的查询可能能够转储损坏部分之后的表部分。 ORDER BY primary_key DESC

innodb_force_recovery 如果start 需要 一个高值InnoDB,则可能存在损坏的数据结构,这可能导致复杂查询(包含WHERE、ORDER BY或其他子句的查询)失败。在这种情况下,您可能只能运行基本SELECT * FROM t 查询。

到此这篇关于mysql 强制InnoDB恢复innodb_force_recovery详解的文章就介绍到这了,更多相关mysql InnoDB恢复innodb_force_recovery内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解MySQL中数据类型和字段类型

    详解MySQL中数据类型和字段类型

    这篇文章主要为大家详细介绍了MySQL中数据类型和字段类型的使用,文中的示例代码讲解详细,对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-09-09
  • Navicat导入导出Mysql 结构、数据、结构+数据完整步骤

    Navicat导入导出Mysql 结构、数据、结构+数据完整步骤

    导出表结构是指将数据库中的表的结构信息导出为SQL脚本或其他格式的文件,这个功能非常实用,特别是在数据库迁移或备份时,这篇文章主要给大家介绍了关于Navicat导入导出Mysql 结构、数据、结构+数据的相关资料,需要的朋友可以参考下
    2024-08-08
  • 大厂面试必问题之MySQL大文本如何进行处理

    大厂面试必问题之MySQL大文本如何进行处理

    这篇文章主要介绍了大厂面试必问题之MySQL大文本如何进行处理的相关资料,面试者需要展示对MySQL索引机制的深入理解,并提出合适的索引类型和创建策略,需要的朋友可以参考下
    2025-01-01
  • 如何利用MySQL的binlog恢复误删数据库详解

    如何利用MySQL的binlog恢复误删数据库详解

    MySQL一旦误删数据库之后恢复数据很麻烦,这里记录一下艰辛的恢复过程,这篇文章主要给大家介绍了关于如何利用MySQL的binlog恢复误删数据库的相关资料,需要的朋友可以参考下
    2021-09-09
  • 安装MySQL后,需要调整的10个性能配置项

    安装MySQL后,需要调整的10个性能配置项

    这篇文章主要介绍了安装MySQL后,需要调整的10个性能配置项,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-12-12
  • MySQL透明页压缩(TPC)批量取消与磁盘碎片优化实战案例

    MySQL透明页压缩(TPC)批量取消与磁盘碎片优化实战案例

    这篇文章主要介绍了MySQL透明页压缩(TPC)批量取消与磁盘碎片优化实战的相关资料,本文通过真实案例,教你安全批量取消TPC并解决磁盘碎片,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-07-07
  • MySQL主从复制与读写分离的用法解读

    MySQL主从复制与读写分离的用法解读

    这篇文章主要介绍了MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • MySql服务器系统变量和状态变量介绍

    MySql服务器系统变量和状态变量介绍

    这篇文章主要介绍了MySql服务器系统变量和状态变量介绍,本文分别讲解了它们的作用、设置方法和获取方法,需要的朋友可以参考下
    2014-12-12
  • MYSQL子查询和嵌套查询优化实例解析

    MYSQL子查询和嵌套查询优化实例解析

    本文通过实例向大家介绍了MYSQL子查询和嵌套查询优化的相关内容,附代码示例,具有一定参考价值。希望对大家使用MySQL有所帮助。
    2017-10-10
  • mysql如何读写分离监控

    mysql如何读写分离监控

    本文介绍了如何通过Zookeeper对Mycat节点进行管理和监控的详细步骤,首先通过tar命令安装Zookeeper,并配置相关文件,接着介绍了如何安装和配置Mycat-web,包括修改配置文件中的IP地址和解决内存不足问题
    2024-11-11

最新评论