從frm和ibd檔恢復表結構
P粉637866931
P粉637866931 2023-10-19 10:01:37
0
2
401

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

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

P粉637866931
P粉637866931

全部回覆(2)
P粉043566314

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

P粉569205478

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

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

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

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

  2. 其次,使用 mysqlfrm 指令從 .frm 檔案取得 SQL 查詢:

    mysqlfrm --diagnostic /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 /example_table.idb

確保 .ibd 檔案可以被 mysql 使用者讀取,例如透過在資料夾中執行 chown -R mysql:mysql *.ibd 。

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

ALTER TABLE example_table IMPORT TABLESPACE;

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!