mysql利用.frm和.ibd恢复数据库表结构和数据
1.新建一个数据A。
2.在A数据库中新建一个和要恢复的表一样的表B,标名要一直,表结构随意。
3.在创建好表结构后,关闭mysql服务service mysqld stop,使用要恢复的表B.frm文件覆盖新建的A数据库中的B表的B.frm文件,然后启动mysql服务service mysqld start,查看A库中B表的表结构,大概率会出现:表不存在的错误。
4.此时,查看mysql data目录先 .err结尾的文件,会发现如下信息:InnoDB: Table A/B contains 1 user defined columns in InnoDB, but 6 columns in MySQL 即:我们要恢复的表有6个字段,而我们在创建表的时候只创建了1个字段;若没有报错,可直接查看到建表语句。
解决办法:删除B表,重新创建一个6个字段的B表,具体字段随便,然后重复第二步的操作,完成后即可查看到需要恢复的B表的表结构。
5.复制出B表的建表语句,删除原来的B表,新建B表,
6.执行sql语句:alter table B discard tablespace;将原先的.ibd文件与原先的.frm文件解除绑定
7.将需要恢复的B.ibd文件覆盖这个新建的A数据库的B表的物理文件B.ibd。
8.执行sql语句:alter table B import tablespace;将复制过来的B.ibd文件与B.frm文件发生联系;此时数据恢复完成。
注:备份数据库命令:mysqldump -h主机名 -P端口 -u用户名 -p密码 数据库名 > 文件名.sql
还原数据库命令:mysql -h主机名 -u用户名 -p密码 databasename < backupfile.sql**