zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MySQL[MariaDB]安装与配置
    Docker介绍与安装使用
    Docker命令操作
    5G网络
    centos7单机部署腾讯蓝鲸运维平台6.0.2
    建立rsyslog日志服务器
    centos7.7安装oracle11g
    Linux pip命令报错 -bash: pip: command not found
    两种方式安装ansible
    centos7安装zabbix
  • 原文地址:https://www.cnblogs.com/gered/p/15380779.html
Copyright © 2011-2022 走看看