重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 296|回复: 0
打印 上一主题 下一主题

[参数配置] MySQL 恢复参数 innodb_force_recovery 说明

[复制链接]
跳转到指定楼层
楼主
发表于 2025-10-26 20:50:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MySQL的参数 innodb_force_recovery 详解
innodb_force_recovery 是 InnoDB 存储引擎的一个重要参数,用于在数据库崩溃恢复时控制恢复行为的级别。这个参数主要在数据库无法正常启动时使用,可以帮助我们从损坏的数据库中恢复数据。


一 参数概述
参数名称:innodb_force_recovery
作用范围:全局变量
默认值:0(正常启动模式)
取值范围:0-6
动态修改:否(必须写入配置文件并重启MySQL)
二 参数级别详解
级别        名称        行为描述        适用场景
0        正常模式        默认值,执行完整恢复        数据库正常运行时
1        SRV_FORCE_IGNORE_CORRUPT        忽略损坏的页        表空间存在损坏页
2        SRV_FORCE_NO_BACKGROUND        阻止主线程和清理线程运行        恢复过程中避免后台干扰
3        SRV_FORCE_NO_TRX_UNDO        不执行事务回滚        事务系统损坏
4        SRV_FORCE_NO_IBUF_MERGE        不执行插入缓冲合并        插入缓冲损坏
5        SRV_FORCE_NO_UNDO_LOG_SCAN        启动时不查看undo日志        undo日志损坏
6        SRV_FORCE_NO_LOG_REDO        不执行前滚操作        redo日志损坏


三 使用场景与操作指南
1 数据库无法正常启动时
# 修改my.cnf文件
[mysqld]
innodb_force_recovery=1  # 从最低级别开始尝试


# 重启MySQL服务
systemctl restart mysqld




2 数据恢复步骤
从级别1开始尝试启动
如果失败,逐步提高级别(最高到6)
启动成功后立即备份数据
恢复参数为0后重建数据库



3 各级别典型应用
-- 级别1:忽略损坏页(可以读取未损坏数据)
SET GLOBAL innodb_force_recovery=1;  -- 注意:实际上需要写入配置文件


-- 级别3:跳过事务回滚(当存在大量未完成事务导致启动失败)
[mysqld]
innodb_force_recovery=3


-- 级别6:最激进模式(redo日志损坏时最后手段)
[mysqld]
innodb_force_recovery=6


四 重要注意事项
只读模式:当设置大于0时,InnoDB处于只读模式,无法执行DML操作


备份策略:
在强制恢复后应立即备份数据
不要在生产环境长期使用非0设置
风险警告:


级别4-6可能导致数据不一致
高级别恢复后必须重建表/数据库
组合效果:高级别包含低级别的所有行为




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 03:02 , Processed in 0.311647 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表