数据恢复咨询热线:400-666-3702  

欢迎访问南京兆柏数据恢复公司,专业数据恢复15年

兆柏数据恢复公司

 常见问题

 当前位置: 主页 > 常见问题

2022年,致第一个感动,服务器数据库报错表丢失问题解决

浏览量: 次 发布日期:2023-09-11 09:18:02

2022年,致第一个感动,服务器数据库报错表丢失问题解决

  去年2021年12月30日中午,我们公司的网站,业务系统突然都无法运转,最终发现我们阿里云服务器自建mysql数据库出问题。

  我们服务器数据库的多数业务数据库的表都报错同样问题, Table '****' doesn't exist ,赶紧用shell方式先把一个着急的客户需求做好后,便开始两天两夜的寻求解决问题之道,搜索了好多各种问题,最终感觉原因貌似ibdata*文件坏的可能性大。因为我们用的INNODB engine引擎, 每个表的后台数据文件 *.frm 和 *.ibd都在,所以开始网上的各种方案的尝试数据恢复,1月1日晚曾经晚上熬夜到凌晨4点 :-(

  中间还曾到某宝找专业数据恢复的技术人员,远程登陆查看问题和报价,一个靠谱的店家报价:最坏的情况是 一个table表的数据恢复的价格是2000,我们大概一个库的表数量是40多个,这费用逆天了。若真花钱买这服务,感觉也是对我一个程序员大叔的耻辱。请原谅我把穷逼解释得如此清新脱俗。

  没办法继续找方案,查mysql的官网的各种资料。功夫不负有心人。刚刚 1月3日凌晨3点,搞定了。哈哈哈哈。

  恢复成功的表数据

  解决方案如下,希望能帮到同样问题的网友

上海数据恢复

  1、安装相同版本的mysql;

  2、找回表结构(若有表结构,直接导入表即可)建立同名的表(InnoDB),随意一个字段即可

  关闭mysql服务,用需要恢复的.frm文件覆盖新生成的.frm文件。接着修改my.ini配置innodb_force_recovery = 6进入恢复模式。启动mysql。

  启动mysql,desc actcalss。我这里直接出现了表结构。若没有,查询日志,会提示该表列数。注释innodb_force_recovery = 6,建立相同列数的表。重复以上步骤,会得到表结构。导出结构,删除表,导入表结构。

  3、.ibd文件包含tablespace id,所以需要修改恢复数据.ibd文件的tablespace id和新建立的相同。可使用winhex(编辑16进制)。打开新建的.ibd文件,得到tablespace id。

  4、打开需恢复的.ibd文件,修改为 00 03。

  5、停止mysql服务,保证innodb_force_recovery = 6。替换.ibd文件。启动mysql。数据和结构都恢复了。可以导出数据和结构。

  最后,教训和感悟

  一: 各位同行,切记做好数据库和各种程序及源码的安全备份。不要以为长时间没出问题就某天不会出问题。我这个案例就是,大概五年多从没出过这种状况,但刚刚碰到了,虽然业务网站不是很重要,但是偶尔对我们公司业务帮助还是有的,重建的话,时间精力费用也不少。

相关推荐