Mysql

從 ibd 文件中恢復沒有 ibdata1 的數據文件夾中的 MySQL 數據庫

  • February 22, 2017

我的 WAMP 目錄不小心被另一個使用者刪除了。只有 MySQL 中的數據文件夾可用。而且,只有數據庫文件夾(“\bin\mysql\mysql5.6.12\data\”中帶有數據庫名稱的文件夾)可用。"\bin\mysql\mysql5.6.12\data" 的根目錄下包括" ibdata1 " 在內的****所有文件也被刪除。

數據庫文件夾僅包含具有以下副檔名的文件。

*.frm, *.ibd

和“db.opt”文件。

如何恢復數據庫?

我已經嘗試恢復 bdata1。但是,無法挽回。而且,一些數據庫也包含 MISAM。

MyISAM

對於 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 的圖示

InnoDB 架構

唯一將 ibdata1 附加到.ibd文件的是數據字典。

如果您決定接受它,您的任務是創建每個表並交換.ibd

在你做任何事情之前,將“\bin\mysql\mysql5.6.12\data”的完整副本複製到另一個

這是一個範例

假設您有一個mydb帶有表的數據庫mytable。這意味著

  • 你有文件夾\bin\mysql\mysql5.6.12\data\mydb

  • 在該文件夾中,您有

    • mytable.frm
    • mytable.ibd

你需要.frm. 如果您查看我的文章如何僅從 .frm 文件中提取表架構?,您可以下載一個 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;

試一試 !!!

DRINK(數據恢復包含必要的知識)負責任

引用自:https://dba.stackexchange.com/questions/57120