13人参与 • 2025-07-22 • Mysql
innodb_force_recovery 是 innodb 存储引擎的一个重要参数,用于在数据库崩溃恢复时控制恢复行为的级别。这个参数主要在数据库无法正常启动时使用,可以帮助我们从损坏的数据库中恢复数据。
级别 | 名称 | 行为描述 | 适用场景 |
---|---|---|---|
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日志损坏 |
# 修改my.cnf文件 [mysqld] innodb_force_recovery=1 # 从最低级别开始尝试 # 重启mysql服务 systemctl restart mysqld
-- 级别1:忽略损坏页(可以读取未损坏数据) set global innodb_force_recovery=1; -- 注意:实际上需要写入配置文件 -- 级别3:跳过事务回滚(当存在大量未完成事务导致启动失败) [mysqld] innodb_force_recovery=3 -- 级别6:最激进模式(redo日志损坏时最后手段) [mysqld] innodb_force_recovery=6
只读模式:当设置大于0时,innodb处于只读模式,无法执行dml操作
备份策略:
风险警告:
组合效果:高级别包含低级别的所有行为
数据导出:
mysqldump -u root -p --all-databases > full_backup.sql
重建数据库:
-- 1. 停止mysql -- 2. 删除ibdata1, ib_logfile*等文件 -- 3. 重置innodb_force_recovery=0 -- 4. 重启mysql并导入数据
innodb_read_only:
innodb_fast_shutdown:
innodb_log_file_size:
检查错误日志:
tail -f /var/log/mysql/error.log
监控恢复进度:
show engine innodb status\g
检查恢复模式状态:
show variables like 'innodb_force_recovery';
innodb_force_recovery
是mysql数据库恢复的强大工具,但需要谨慎使用。建议在测试环境先验证恢复方案,并确保有完整备份后再在生产环境操作。
更详细的内容请查看官方文档:
https://dev.mysql.com/doc/refman/8.4/en/forcing-innodb-recovery.html
到此这篇关于mysql参数innodb_force_recovery详解的文章就介绍到这了,更多相关mysql innodb_force_recovery 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论