记一次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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.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数据转换