mysql如何在无法启动的情况下进行数据恢复

事故背景

原本开发的好好的,突然发现mysql连接不上,去服务器一看宕机了,想着重启一下,结果找不到bin目录,重启service也不行,当时忘记把mysql添加service了,网上找了一圈没找到解决方法。

操作

最后经过权衡,选择新起一个mysql服务,进行数据恢复,但搞笑的是,项目并没有导出sql文件进行备份,由于旧mysql也重启不了,无法进行数据迁移,形成了一个很尴尬的局面。

突然想到一个歪路子,把旧mysql的data目录下的文件直接移到新mysql下,结果显然是失败的,mysql根本启动不了,按照网上的教程也都不行。

我打开数据库目录下,看到的是一个一个的idb文件,经过百度发现:MySQL数据库中的 `.ibd` 文件是InnoDB存储引擎的数据文件,其中包含表的数据和索引。`.ibd` 文件是InnoDB表空间的一部分,它包含了表的实际数据、索引数据和元数据。

我心想,这不就完事了吗,ibd文件中需要的数据都有了,直接拿出来不就能进行恢复了,但是又错了,ibd是二进制文件,无法直接打开查看,网上找了一圈也没有对应的解决方法。

这时候就想起了万能的GitHub,果然发现一个好东西:https://github.com/ddcw/ibd2sql

这是一个使用py对ibd文件解析成sql,ddl等语句的工具,具体操作方法见GitHub。

他完美的帮我还原了原本建表语句和表数据,帮助我完成数据恢复。

原理:

ibd文件结构和解析的原理在https://cloud.tencent.com/developer/article/2377921

总结

  1. 数据库一定要定时做数据备份,防止服务宕机
  1. 尽量将mysql添加到服务,用服务对mysql进行管理
  1. 遇到网上难以解决的问题,多去GitHub上逛逛
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值