首先;只有InnoDB引擎的数据库才需要这样恢复;myisam不需要这么麻烦;只要数据文件存在直接复制过去就可以。
其次;mysql数据库必须是按表存放数据的;默认不是;但是大家生产肯定是按分表设置的吧;如果不是;则无法这样恢复数据。mysql.ini的设置为 innodb_file_per_table = 1。
.frm文件是mysql表结构定义文件;使用mysql-utilities中的mysqlfrm来将其转换成mysql的create语句;来重建表结构
.ibd文件存了每个表的元数据;包括表结构的定义等。就知道是用这个来恢复数据就行
mysql-utilities https://downloads.mysql.com/archives/utilities/
以一道网站重构题为例
题目给了网站源码和mysql的数据库文件
首先找到网站源码里对数据库连接的config文件;将其参数改为我们自己建立的数据库。
我们要按照它的db.opt来创建对应的数据库
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci
数据库名;quzhen
用户:quzhen
密码:quzhen
注意;用phpstudy创建数据库要用innodb引擎
先将.frm文件的文件名提取出来;他们的文件名对应着一个数据表
dir /b /t >frmname.txt
dir命令https://blog.csdn.net/weixin_41905135/article/details/124881754
然后利用Notepad++;;的功能将.frm文件剪切出来;然后再去掉后缀
就可以得到.frm的文件名了
将其处理成命令行的格式
–server=用户名;密码
所以root;root要按照自己的情况修改
mysqlfrm --server=root:root;localhost:3306 文件路径文件名.frm > 文件路径sql文件名.sql --diagnostic --port=3307
前面是源文件;后面是目标文件
利用正则匹配来处理
mysqlfrm --server=root:root;localhost:3306 文件路径1.frm > 文件路径sql1.sql --diagnostic --port=3307
然后复制源文件所在的路径和目标路径
将其替换到上面
源文件路径;C:Users39473DesktopDesktopypzxw
目的路径;D:phpstudy_proExtensionsMySQL5.7.26dataquzhen
然后在mysqlfrm所在的目录打开命令行,复制粘贴上面的命令到命令行执行;在sql文件夹得到.sql文件;sql文件夹要先创建好)
打开后就都是create语句
用命令
copy *.sql 1.sql
将所有的sql语句复制到一个sql文件里
然后去掉warning:xxx
在行尾加上
ROW_FORMAT=COMPACT;
来设置其行格式;原因不用深究;
然后利用这些语句来建表
主要要修改一下
CREATE TABLE ;ypzxw;.;m_entries_cache;
为
CREATE TABLE ;自己的数据库名;.;m_entries_cache;
因为是mysqlfrm工具根据上面的源文件路径来自动生成的
表结构就建好了
使用命令
alter table ;表名; discard tablespace;
删除刚刚通过建表语句生成的.ibd文件
用notepad来处理
执行命令;可以看见idb文件已经没了
然后将要恢复的数据库的.ibd文件复制到新建数据库的目录下
phpstudy_pro的一般路径为
可以使用
xcopy *.ibd C:Users39473DesktopDesktopypzxwibd
来讲.ibd文件都复制到目标文件夹;只能是绝对路径;
复制.ibd文件到数据库目录后
执行命令
alter table ;表名; import tablespace;
来导入表空间文件;.ibd)
还是用notepad处理
然后执行命令
数据就恢复了
后续就是用php服务来运行网站源码;来查找相关数据了。
后面找时间来做一个直接处理语句的脚本;打取证也方便
通过.frm 和.ibd 批量恢复mysql数据