Mysql
從 ibd 文件中恢復沒有 ibdata1 的數據文件夾中的 MySQL 數據庫
我的 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 的圖示
唯一將 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(數據恢復包含必要的知識)負責任