84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我正在嘗試恢復 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
檔案匯入資料並將復原資料。