1. 程式人生 > 其它 >通過.frm和.idb檔案恢復mysql資料庫

通過.frm和.idb檔案恢復mysql資料庫

本文對該文章進行參考,地址https://baijiahao.baidu.com/s?id=1675966756498698574&wfr=spider&for=pc

現在有一個數據庫需要恢復,已經獲取到.frm和.ibd檔案

這些檔案即是我之前的文章2021長安杯wp - WXjzc - 部落格園 (cnblogs.com)中的第36題的資料庫的檔案

先將要恢復的資料庫的表名全部提取出來dir /l *.frm /b > filename.txt,去掉字尾即為表名

下載MySQL Utilities用於將frm檔案轉換成sql檔案lhttps://downloads.mysql.com/archives/utilities/

通過phpstudy啟用mysql服務,引擎一定要選擇InnoDB,這個引擎才會生成.frm和.ibd檔案

然後編寫一個bat檔案,批量完成操作,格式為

mysqlfrm --server=使用者名稱:密碼@伺服器:埠 原始檔路徑\abc.frm > 目標檔案路徑\abc.sql --diagnostic --port=3307 --user=

mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\@6211@7684@[email protected] > E:\cab\www_honglian7001\sql\@6211@7684@[email protected] --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin.frm > E:\cab\www_honglian7001\sql\app_admin.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_cate.frm > E:\cab\www_honglian7001\sql\app_admin_cate.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_log.frm > E:\cab\www_honglian7001\sql\app_admin_log.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_menu.frm > E:\cab\www_honglian7001\sql\app_admin_menu.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_appconfig.frm > E:\cab\www_honglian7001\sql\app_appconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_article.frm > E:\cab\www_honglian7001\sql\app_article.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_article_cate.frm > E:\cab\www_honglian7001\sql\app_article_cate.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_attachment.frm > E:\cab\www_honglian7001\sql\app_attachment.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_content.frm > E:\cab\www_honglian7001\sql\app_content.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_emailconfig.frm > E:\cab\www_honglian7001\sql\app_emailconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_messages.frm > E:\cab\www_honglian7001\sql\app_messages.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_mobile.frm > E:\cab\www_honglian7001\sql\app_mobile.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_smsconfig.frm > E:\cab\www_honglian7001\sql\app_smsconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_urlconfig.frm > E:\cab\www_honglian7001\sql\app_urlconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_user.frm > E:\cab\www_honglian7001\sql\app_user.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_webconfig.frm > E:\cab\www_honglian7001\sql\app_webconfig.sql --diagnostic --port=3307 --user=

開啟檔案就能發現,這些sql語句完成了表結構的建立

可以將這些sql檔案中的語句全部合到同一個檔案當中copy *.sql create.sql

把註釋會引起報錯的warning刪掉

在建立一個同名的資料庫create DATABASE www_honglian7001

將之前處理的sql語句匯入並執行

使用命令alter table `表名` discard tablespace;來刪除建立表時生成的.ibd檔案,並生成.frm檔案,不執行這個命令的話,則只有.ibd檔案

mysql的資料目錄可以在phpstudy中檢視

將要恢復的.ibd檔案放入目錄下對應的資料庫目錄中

再使用命令alter table `表名` import tablespace;實現資料遷移

重新整理資料庫後即可檢視到資料已經恢復

有一點出現了問題,之前的表名@6211@7684@8d26@5355,這其實是最初的資料庫中的一箇中文表明,為我的賬單,但是現在變成了編碼形式,以這個形式進行上述操作的時候,生成的.frm檔案會變成@04006211@04007684@04008d26@04005325,從而導致恢復失敗,要解決這個問題,只需要將這類檔案在一開始就重新命名為正常格式即可

重新命名之後進行操作,資料成功恢復