我正在嘗試恢復 PMA 中的資料庫,但只能存取 frm 和 ibd 檔案 - 而不能存取我了解您需要的 ib_log 檔案。
我知道我可能無法恢復資料庫數據,但是是否可以從 frm 文件恢復表的結構?
InnoDB 需要 ib_log 檔案來進行資料恢復,但它也需要 ibdata1 文件,其中包含資料字典,有時還包含表格的待處理資料。
資料字典是一種記錄表結構的重複系統,並將表 ID 與包含表格資料的實體 .ibd 檔案相符。
您無法在沒有 InnoDB 資料字典的情況下移動 .ibd 文件,且資料字典必須與 .ibd 文件中找到的表 ID 相符。您可以重新附加.ibd 檔案並恢復數據,但該過程不適合膽小的人。請參閱 http://www.chriscalender.com /僅從 ibd 檔案中還原 innodb 表/
您可以使用 .frm 檔案透過一些檔案技巧來還原結構,但您首先無法將它們建立為 InnoDB 表。這是一個博客,介紹了將 .frm 檔案恢復為 MyISAM 表的方法: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering- create-table-statement-from-frm-file/
您將無法為此使用 PMA。您需要超級使用者存取伺服器上的資料目錄。
我僅從 .frm 和 .idb 檔案恢復了表。
.frm
.idb
如果您已經知道表的架構,則可以跳過此步驟。
首先,安裝MySQL 實用程式。 然後您可以在命令提示字元(cmd)中使用mysqlfrm命令。
mysqlfrm
其次,使用 mysqlfrm 指令從 .frm 檔案取得 SQL 查詢:
mysqlfrm --diagnostic <path>/example_table.frm
然後您可以取得 SQL 查詢來建立相同的結構化表。 像這樣:
CREATE TABLE `example_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(150) NOT NULL, `photo_url` varchar(150) NOT NULL, `password` varchar(600) NOT NULL, `active` smallint(6) NOT NULL, `plan` int(11) NOT NULL, PRIMARY KEY `PRIMARY` (`id`) ) ENGINE=InnoDB;
使用上述 SQL 查詢建立表格。
如果舊資料仍然存在,您可能需要先刪除對應的資料庫和表。確保您有資料檔案的備份。
執行此查詢以刪除新表資料:
ALTER TABLE example_table DISCARD TABLESPACE;
這將刪除新的 .frm 檔案和(新的、空的).idb 檔案之間的連接。另外,刪除資料夾中的 .idb 檔案。
然後,將舊的.idb檔案放入新資料夾中,例如:
cp backup/example_table.ibd <path>/example_table.idb
確保 .ibd 檔案可以被 mysql 使用者讀取,例如透過在資料夾中執行 chown -R mysql:mysql *.ibd 。
.ibd
mysql
執行此查詢以匯入舊資料:
ALTER TABLE example_table IMPORT TABLESPACE;
這將從 .idb 檔案匯入資料並將復原資料。
InnoDB 需要 ib_log 檔案來進行資料恢復,但它也需要 ibdata1 文件,其中包含資料字典,有時還包含表格的待處理資料。
資料字典是一種記錄表結構的重複系統,並將表 ID 與包含表格資料的實體 .ibd 檔案相符。
您無法在沒有 InnoDB 資料字典的情況下移動 .ibd 文件,且資料字典必須與 .ibd 文件中找到的表 ID 相符。您可以重新附加.ibd 檔案並恢復數據,但該過程不適合膽小的人。請參閱 http://www.chriscalender.com /僅從 ibd 檔案中還原 innodb 表/
您可以使用 .frm 檔案透過一些檔案技巧來還原結構,但您首先無法將它們建立為 InnoDB 表。這是一個博客,介紹了將 .frm 檔案恢復為 MyISAM 表的方法: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering- create-table-statement-from-frm-file/
#您將無法為此使用 PMA。您需要超級使用者存取伺服器上的資料目錄。
我僅從
.frm
和.idb
檔案恢復了表。取得用於建立表格的 SQL 查詢
如果您已經知道表的架構,則可以跳過此步驟。
首先,安裝MySQL 實用程式。 然後您可以在命令提示字元(cmd)中使用
mysqlfrm
命令。其次,使用
mysqlfrm
指令從.frm
檔案取得 SQL 查詢:然後您可以取得 SQL 查詢來建立相同的結構化表。 像這樣:
建立表格
使用上述 SQL 查詢建立表格。
如果舊資料仍然存在,您可能需要先刪除對應的資料庫和表。確保您有資料檔案的備份。
恢復資料
執行此查詢以刪除新表資料:
這將刪除新的
.frm
檔案和(新的、空的).idb
檔案之間的連接。另外,刪除資料夾中的.idb
檔案。然後,將舊的
.idb
檔案放入新資料夾中,例如:確保
.ibd
檔案可以被mysql
使用者讀取,例如透過在資料夾中執行 chown -R mysql:mysql *.ibd 。執行此查詢以匯入舊資料:
這將從
.idb
檔案匯入資料並將復原資料。