• mysql误删ibd文件


    【1】前置条件

    (1.1)基本信息

    版本:mysql 8.0.22

    (1.2)模拟 rm 删除 ibd文件

    删除 test库下的 test11.ibd文件

      

    rm /data/mysql/data/test/test11.ibd

    【2】情况处理

    (2.1)rm 删除 ibd 文件后的影响

    以下情况依然可以》

      (1)数据库中依然可以查询 

        

      (2)给表新增/删除索引—不能发现

     以下情况会报错:

      (1)对表进行 ALTER TABLE tbl_name ENGINE=INNODB 操作—能发现

      (2)对表字段属性进行变更操作—能发现

      (3)对表进行 OPTIMIZE 操作—能发现

      (4)给表新增/删除字段—能发现(好像其实也可以在8.0)

    (2.2)找出在内存文件系统中的该表数据文件  /proc

    Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

      

    然后进入该目录下去找,/proc/'mysqld的进程id号/fd'

       

    我们发现是有 test11.ibd文件的

    (2.3)恢复ibd文件

    执行cp命令,将文件拷贝到原数据目录下

    在进行cp之前,要确保该表数据变更已经落盘,且没有新的操作。

    cp /proc/2365/fd/41  /data/mysql/data/test/test11.ibd

    (2.4)操作前后核验

    # 删掉ibd文件后
    ERROR 1030 (HY000): Got error 44 - 'InnoDB error' from storage engine
    root@localhost|test>ALTER TABLE test11 ENGINE=INNODB;
    ERROR 1030 (HY000): Got error 44 - 'InnoDB error' from storage engine
    root@localhost|test>ALTER TABLE test11 ENGINE=MYISAM;
    ERROR 1025 (HY000): Error on rename of './test/test11' to './test/#sql2-93d-b' (errno: 197 - Tablespace cannot be accessed)
    
    # 复制文件恢复后=》
    root@localhost|test>ALTER TABLE test11 ENGINE=INNODB;
    Query OK, 0 rows affected (0.13 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    【参考文档】

    https://blog.csdn.net/ActionTech/article/details/118723562?spm=1001.2014.3001.5501

  • 相关阅读:
    P1880 [NOI1995]石子合并
    LC 1388. Pizza With 3n Slices
    1129 Recommendation System
    1131 Subway Map
    C#中的lamda实用的select用法
    C# Image与Base64编码互转函数
    签名算法的URL
    xml格式封装数据
    layer 相关网址
    js-清空array数组
  • 原文地址:https://www.cnblogs.com/gered/p/15380779.html
Copyright © 2020-2023  润新知