寫這篇文章其實不是我非常願意的事情,mm兆金 娛樂城因為我正在恢復我的伺服器資料庫資料。然而,這篇文章意外地誕生了,我想分享一下關於恢復mysql.frm.ibd檔案資料的教程,希望能幫助更多需要恢復資料的人。此刻我的情緒很激動。
首先,讓我描述一下伺服器崩潰的經過。我使用的是WordPress部落格網站,不小心輸入了rm指令,導致伺服器上的所有檔案都被刪除了。幸運的是,我使用的是阿里雲的伺服器,所以我聯繫了他們的工程師進行了緊急修復(我建議使用商業化雲端服務的人在遇到問題時立即聯繫服務商的工程師)。工程師們非常迅速地解決了問題。起初,我以為所有的文件都已經丟失,但經過我們共同的努力,他們提供了一個臨時盤來存儲丟失的數據,娛樂 城 註冊 體驗 金最終成功地找回了所有的數據。然而,如果沒有備份WordPress的資料庫文件,你將面對的不是SQL文件,而是.frm和.ibd文件。
如果你對資料庫表格的建立不熟悉,請先閱讀一些相關的知識或學習教學!
現在讓我簡單介紹一下.frm、.ibd和.ibdata檔:
.frm檔案:包含與表格相關的元資料訊息,主要是表結構的定義資訊。不論使用什麼儲存引擎,每個表都會有一個以表名命名的.frm檔。
.ibd和.ibdata:這兩者都是InnoDB儲存引擎的資料庫檔案。
當使用共享表空間時,所有InnoDB表的資料都儲存在.ibdata檔案中,因此當表越來越多時,這個檔案會變得很大。
相對應的.ibd檔是針對採用獨享表空間時的InnoDB表的資料檔。
現在我們開始教學!我使用的是MySQL 5.7版本,線上娛樂城ptt因為我的專業是行動應用開發,所以學習一些MySQL知識也是必要的。
我在Windows下進行操作,因為這樣比在伺服器上操作更方便。恢復完成後再將資料導回伺服器。
首先,我們建議建立一個與之前相同名稱的資料庫,例如我的部落格資料庫名稱是51huanqi.cn,那麼現在也新建一個同名的資料庫。
1.先隨意創建一張同名表:
CREATE TABLE wp_commentmeta (comment_ID bigint) ENGINE=InnoDB;
2.關閉MySQL服務:
net stop mysql
或透過電腦管理服務中找到MySQL,然後關閉。
3.將備份的.frm檔案覆蓋新建的表的.frm檔案。
4.啟動MySQL服務:
net start mysql
5.在MySQL安裝目錄下的data資料夾中,金財寶娛樂城用文字編輯器開啟.err文件,找到錯誤日誌。
6.刪除當前表,然後使用獲得的建表語句重新建立表,建議使用可視化的MySQL軟體(如Navicat)進行設置,以避免透過命令建立資料表時出現錯誤。範例建表語句:
CREATE TABLE wp_commentmeta (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` bigint(20) unsigned NOT NULL DEFAULT ‘0’,
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `comment_id` (`comment_id`),
KEY `meta_key` (`meta_key`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在這個建表語句最後加入 ROW_FORMAT=COMPACT;。
7.關閉MySQL服務:
net stop mysql
8.將備份的.frm檔案覆蓋新建的表的.frm檔案。
9.修改設定檔my.ini,在[mysqld]下新增或修改 innodb_force_recovery=6。
10.啟動MySQL服務,查看表格結構,應該可以看到表格結構已經恢復。
11.導出表結構:
mysqldump -uroot -pPASSWORD database_name table_name > path_to_save_structure_file.sql
12.在.sql檔中找到建表語句。
13.停止MySQL服務,刪除這張表,娛樂城 洗錢然後使用剛剛取得的建表語句重新建立這張資料表,確保在建表語句末尾新增 ROW_FORMAT=COMPACT;。
14.然後,使用指令提示字元執行這段建表語句。
附註:確保在建表語句中包含 ROW_FORMAT=COMPACT;,否則後續新增的.ibd檔案仍無法開啟。
恢復表資料:
分離表空間:
ALTER TABLE wp_commentmeta DISCARD TABLESPACE;
然後將備份的.ibd檔覆蓋新建的表的資料檔。
重啟MySQL服務:
net start mysql
匯入表空間:
ALTER TABLE wp_commentmeta IMPORT TABLESPACE;
至此,表資料應該已經恢復成功!
請注意,本教學是針對本地恢復的,如果是線上環境,操作原理相同,但請謹慎操作。