已测试版本:5.5.18
OS :RHEL 6.3
前提:数据库无法启动,无备份,ibd文件还在! ibd文件还在! ibd文件还在!
背景:升级失败,undrop-for-innodb 只能读取ibdata 中的表的信息。

1. 在其他服务器安装相同版本的MySQL,建立空库ybt
2. 在空库ybt中新建表 tdm_fws_module_recomment_server_ed
3. 在5.5 版本中,通过ibd文件来查看tablespace id
    二进制的方式打开
    vi tdm_fws_module_recomment_server_ed.ibd -b
    在vi 下,输入 :%!xxd 转为16进制
    
    0000000: 80b4 eafe 0000 0000 0000 0000 0000 0000  ................
    0000010: 0000 0000 0037 b458 0008 0000 0000 0000  .....7.X........
    0000020: 0000 0000 012a 0000 012a 0000 0000 0000  .....*...*......
    0000030: 0006 0000 0040 0000 0000 0000 0004 0000  .....@..........
    0000040: 0000 ffff ffff 0000 ffff ffff 0000 0000  ................
    0000050: 0001 0000 0000 009e 0000 0000 009e 0000  ................
    0000060: 0000 ffff ffff 0000 ffff ffff 0000 0000  ................
    0000070: 0000 0000 0003 0000 0000 ffff ffff 0000  ................
    0000080: ffff ffff 0000 0000 0001 0000 0002 0026  ...............&
    其中,第三行的两个012a 为tablespace id
4. 备份已损坏库的ibd文件,并覆盖到新建库的ybt 对应目录下的ibd文件
5. 通过vi 打开拷贝后的ibd文件
    在vi 下,输入 :%!xxd 转为16进制
    将该ibd文件的两个 tablespace id 改为 012a
    输入 :%!xxd -r 转换为二进制
    输入 :wq! 保存
6. 修改innodb_force_recovery = 6,重启数据库
7. 导出数据

5.6 以后可以通过 以下sql 查询

mysql> select * from information_schema.INNODB_SYS_DATAFILES order by SPACE desc ;
+-------+---------------------------------------------------+
| SPACE | PATH                                              |
+-------+---------------------------------------------------+
|   154 | ./test/sbtest2.ibd                                |
|   152 | ./test/#sql-ib161-1555929536.ibd                  |
|   146 | ./test/sbtest1.ibd                                |
|   141 | ./test/user.ibd                                   |

重组表的时候,SPACE 会变

相关文章:

  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
  • 2021-08-29
猜你喜欢
  • 2022-12-23
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
  • 2021-08-04
相关资源
相似解决方案