搜尋

首頁  >  問答  >  主體

從frm和ibd檔恢復表結構

我正在嘗試恢復 PMA 中的資料庫,但只能存取 frm 和 ibd 檔案 - 而不能存取我了解您需要的 ib_log 檔案。

我知道我可能無法恢復資料庫數據,但是是否可以從 frm 文件恢復表的結構?

P粉637866931P粉637866931476 天前881

全部回覆(2)我來回復

  • P粉043566314

    P粉0435663142023-10-20 00:08:59

    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。您需要超級使用者存取伺服器上的資料目錄。

    回覆
    0
  • P粉569205478

    P粉5692054782023-10-20 00:04:57

    我僅從 .frm.idb 檔案恢復了表。

    取得用於建立表格的 SQL 查詢

    如果您已經知道表的架構,則可以跳過此步驟。

    1. 首先,安裝MySQL 實用程式。 然後您可以在命令提示字元(cmd)中使用mysqlfrm命令。

    2. 其次,使用 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 。

    執行此查詢以匯入舊資料:

    ALTER TABLE example_table IMPORT TABLESPACE;

    這將從 .idb 檔案匯入資料並將復原資料。

    回覆
    0
  • 取消回覆