记一次mysql 异常停电数据库损坏恢复的方法

mysql innodb 引擎损坏恢复的参考资料还是很多的,以下记录一个问题的处理

问题

异常停电,mysql 重启异常,innodb tablespace 异常

一般常见的解决方法

备份,删除ibdata1,ib_logfile* 等文件,配置

innodb_force_recovery = 6
innodb_purge_threads = 1

然后尝试重启

简单说明

以上方法不直接推荐使用,理论上先备份是最好的,也是应该做的,然后逐步尝试从1-6进行增加处理
当然不同的步骤进行的操作是不一样的,如果1可以进入(先备份),同时可以链接数据库特别好,链接
进行数据备份(很重要),然后尝试不同的级别,查看mysql server log,查看信息,一般会有提示信息的
告诉我们那种表的有异常(也可以使用mysqlcheck工具)

碰到的几个问题

可能系统比较好,异常停电的时候,1 可以进入然后就进行了备份操作(dump),然后就打算使用6模式
进行数据处理了(首先进行了db 数据备份),然后删除ibdata1,ib_logfile* 结果提示table 不存在,感觉
不对,然后基于已有的备份,直接替换删除的文件,还是使用6模式,特别好,直接可以访问数据库,同时
给了一个比较好的err 提示(mysql server 日志)index 异常(就一张表,特别好),因为上边已经备份了
数据库,为了方便又进行了异常索引表数据的备份,因为模式是6不能进行删除操作,所以在系统db 创建了
又异常的表,停止mysql 然后copy 了frm文件到有问题的db 系统,然后修改模式为1,此模式下我们可以进行
数据表的操作,然后我们删除了有异常的table,重新导入数据进行恢复,之后停止mysql,修改innodb_force_recovery
为默认的,启动mysql 测试发现系统已经正常了,实际上我们全程可以基于1模式进行数据库的恢复

总结

进行恢复的时候尽备份很重要,遇到问题不能着急,应该思考下(尤其比较重要的db系统),同时对于依赖db的系统
也应该进行可能的停机(避免数据不一致的操作),官方文档是特别好的资料,不能直接百度搜索解决问题

参考资料

https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
https://www.askmaclean.com/archives/innodb-corruption-recover-guide.html

posted on   荣锋亮  阅读(969)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2018-12-28 Gravitational Teleport docker-compose简单运行
2018-12-28 Gravitational Teleport简单使用
2018-12-28 Gravitational Teleport 开源的通过ssh && kubernetes api 管理linux 服务器集群的网关
2013-12-28 使用js 文件参数 以及IHttpModule实现服务验证asp.net 版的初步实现
2013-12-28 获取js 文件传递的参数并使用json2进行json数据转换

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示