从 ibd 文件中没有 ibdata1 的数据文件夹中恢复 MySQL 数据库

cyb*_*ani 16 mysql innodb recovery ibdata wamp

我的 WAMP 目录不小心被另一个用户删除了。MySQL 中只有数据文件夹可用。并且,只有数据库文件夹(“\bin\mysql\mysql5.6.12\data\”中带有数据库名称的文件夹)可用。“\bin\mysql\mysql5.6.12\data\”根目录下包括“ ibdata1 ”在内的所有文件也被删除。

数据库文件夹仅包含以下扩展名的文件。

*.frm,*.ibd

和“db.opt”文件。

如何恢复数据库?

我已经尝试恢复 bdata1。但是,无法收回。而且,一些数据库也包含 MYISAM。

Rol*_*DBA 19

我的ISAM

对于 MyISAM 表 mydb.mytable,你应该有三个文件

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

它们应该已经可以作为表访问,因为每个文件都包含所需的数据、元数据和索引信息。它们共同构成了桌子。没有可访问的外部存储引擎机制。

数据库

看看这个 InnoDB 的图示

InnoDB 架构

将 ibdata1 附加到.ibd文件的唯一内容是数据字典。

如果您决定接受它,您的任务是创建每个表并交换 .ibd

在你做任何事情之前,将“\bin\mysql\mysql5.6.12\data”的完整副本复制到另一个

这是一个示例

假设您有一个mydb包含表的数据库mytable。这意味着

  • 你有文件夹 \bin\mysql\mysql5.6.12\data\mydb
  • 在那个文件夹里面,你有
    • mytable.frm
    • mytable.ibd

你需要.frm. 如果您查看我的帖子How can extract the table schema from only the .frm file? ,您可以下载一个 MySQL 实用程序,该实用程序可以生成创建表所需的 SQL。

您现在应该执行以下操作

  • 移动mytable.ibd\bin\mysql\mysql5.6.12\data
  • 运行 SQL 以创建 InnoDB 表
  • 登录mysql并运行ALTER TABLE mydb.mytable DISCARD TABLESPACE;(这将删除\bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
  • 复制\bin\mysql\mysql5.6.12\data\mytable.ibd\bin\mysql\mysql5.6.12\data\mydb
  • 登录mysql并运行ALTER TABLE mydb.mytable IMPORT TABLESPACE;(这将注册\bin\mysql\mysql5.6.12\data\mydb\mytable.ibd到数据字典中)

在此之后,该表mydb.mytable应该是完全可访问的。您可以通过简单地运行来测试可访问性:

SELECT * FROM mydb.mytable LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

试一试 !!!

DRINK(数据恢复包含必要的知识)负责任