【1.1】mysql frm文件丢失(ibd文件丢失)

时间:2022-01-11 02:56:05

【1】故障模拟准备环境

这里以innodb为例

  【1.1】配置参数

    开启独立表空间 innodb_file_per_table;

  【1.2】构建测试数据

    create database test;

    create table a(id int,num int); 

    insert into  a values(1,11),(2,12);

      【1.1】mysql frm文件丢失(ibd文件丢失)

 

 

【2】故障模拟

【2.1】在业务正在运行的情况下,手动删除 test库 下的 a.frm

      【1.1】mysql frm文件丢失(ibd文件丢失)

 

【2.2】删除完之后,会发生什么?

       【1.1】mysql frm文件丢失(ibd文件丢失)

      如上图所示可知(在业务还在跑的情况下):

        无论是对于数据表的增删查改,还是数据结构的增删查改。统统失效,连 information_schema.columns 都查不到。

     

【3】彻底删除这个表

        【1.1】mysql frm文件丢失(ibd文件丢失)

【3.1】保留这个表数据(要是真不想要了,这步也可以不用做)

          cp a.ibd a_bak.ibd

【3.2】随便找个其他表的frm文件重命名成故障表的frm文件

          cp test1.frm a.frm

【3.3】加上权限,如下图可以发现是root创建的

          chown -R mysql:mysql /data/mysql

【3.4】查看表与表结构,然后删除表

          【1.1】mysql frm文件丢失(ibd文件丢失)

 

 

       我们可以发现已经有了,但很明显,表结构不是我们a表的结构,而是test1表结构。弄好了之后,发现我们可以删除表了!

          

  

 

【4】恢复使用

【4.1】去其他库构建相同名称表

      create database test1;

      如何获取表结构?只能靠着记忆,或者去binlog里看看有没有,最靠谱的当然是去备份里找。