惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
IT之家
IT之家
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
U
Unit 42
罗磊的独立博客
博客园 - Franky
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
P
Palo Alto Networks Blog
F
Fortinet All Blogs
P
Proofpoint News Feed
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
Spread Privacy
Spread Privacy
S
Securelist
C
Cisco Blogs
I
Intezer
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
T
Troy Hunt's Blog
T
Threatpost
博客园 - 司徒正美
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
T
The Blog of Author Tim Ferriss
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
S
SegmentFault 最新的问题

博客园 - hu晓峰

记winform程序异常排查 记一次wpf 背景图的坑点 【Unity踩坑】Unity项目管理员权限问题(Unity is running as administrator ) 依赖注入 微服务聚合查询 libmodbus编译为64位动态库 一文读懂Modbus协议:工业设备的“普通话“通信指南 Mysql union与union all有什么区别? 理解Systemd服务重启策略:on-failure vs always Redis分布式锁正确的实现方法 C# 解决串口通讯中,返回数据不完整 字典Dictionary.Add不是把新的元素插入到字典最后面 c# Avalonia 架构开发跨平台应用 ‌索引基数 整数取低字节 C#汉字-区位码相互转化类 avalonia在linux下运行出现Default font family name can't be null or empty问题的解决 ICMP timestamp请求响应漏洞CVE-1999-0524解决方法 详解mysql的for update 使用Redis的SETNX命令实现分布式锁 ASP.NET Core中如何对不同类型的用户进行区别限流
MySQL InnoDB损坏修复:使用innodb_force_recovery
hu晓峰 · 2025-01-03 · via 博客园 - hu晓峰

引言

在使用MySQL数据库时,有时可能会遇到InnoDB存储引擎的表文件损坏的情况。这可能是由于硬件故障、系统崩溃、不正确的操作或其他原因导致的。当遇到这种问题时,MySQL提供了一个名为innodb_force_recovery的配置选项,它可以帮助我们尝试恢复损坏的InnoDB表。

innodb_force_recovery选项

innodb_force_recovery是一个用于控制InnoDB恢复模式的配置选项。通过设置不同的值,可以控制MySQL在启动时对损坏的InnoDB表进行不同程度的恢复操作。这个选项的值范围从1到6,每个值都有不同的恢复级别和可能的风险。

  • innodb_force_recovery = 1:尝试恢复损坏的表,但不会执行任何写操作。
  • innodb_force_recovery = 2:尝试恢复损坏的表,并允许进行写操作,但会忽略一些可能导致错误的检查。
  • innodb_force_recovery = 3:尝试恢复损坏的表,并允许进行写操作,同时会忽略一些可能导致错误的检查和修复操作。
  • innodb_force_recovery = 4:允许对损坏的表进行更深入的恢复操作,但可能会导致数据丢失。
  • innodb_force_recovery = 5:允许对损坏的表进行更深入的恢复操作,并忽略更多的检查和修复操作,可能导致数据丢失。
  • innodb_force_recovery = 6:尝试进行最激进的恢复操作,几乎忽略所有的检查和修复操作,可能导致大量数据丢失。

如何使用innodb_force_recovery

  1. 备份数据:在进行任何恢复操作之前,强烈建议备份当前的数据文件,以防止数据丢失。
  2. 修改配置文件:在MySQL的配置文件(通常是my.cnfmy.ini)中,添加或修改innodb_force_recovery选项的值。
  1. [mysqld]
  2. innodb_force_recovery = 1
  1. 重启MySQL服务:重启MySQL服务以使配置更改生效。
  1. sudo service mysql restart
  1. 检查恢复结果:登录到MySQL,并检查损坏的表是否已经恢复。
  1. SHOW TABLE STATUS LIKE 'your_table_name';
  1. 逐步增加恢复级别:如果表仍然无法访问或数据不一致,可以尝试逐步增加innodb_force_recovery的值,但请注意,较高的值可能会导致数据丢失。
  2. 导出和恢复数据:一旦能够访问损坏的表,建议尽快导出数据,并在新的、健康的数据库实例上恢复数据。
  3. 重置innodb_force_recovery:在数据成功恢复后,不要忘记将innodb_force_recovery的值重置为0,并重启MySQL服务。

注意事项

  • 使用innodb_force_recovery时应谨慎操作,因为较高的恢复级别可能会导致数据丢失。
  • 在使用innodb_force_recovery之前,务必备份数据以防止意外情况发生。
  • 如果无法恢复数据,考虑寻求专业的数据库恢复服务。

总结

MySQL的innodb_force_recovery选项为损坏的InnoDB表提供了一种恢复机制。在使用此选项时,务必谨慎操作,并根据实际情况选择合适的恢复级别。在恢复过程中,务必保持对数据的备份,以防止数据丢失。