本文對該文章進行參考,地址https://baijiahao.baidu.com/s?id=1675966756498698574&wfr=spider&for=pc 現在有一個資料庫需要恢復,已經獲取到.frm和.ibd文件 這些文件即是我之前的文章2021長安杯wp - WXjzc - 博客園 ...
本文對該文章進行參考,地址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
,從而導致恢復失敗,要解決這個問題,只需要將這類文件在一開始就重命名為正常格式即可
重命名之後進行操作,數據成功恢復