有时候运维人员会直接拷贝数据库文件给咱们,这个时候就须要把数据还原到mysql中,注意mysql版本要对应(也能够版本高一点),mysql所在的操做系统也注意最好同样(有一次window的到linux的mysql,就有部分表没法恢复),首先参考mysql数据储存文件个格式,参考:mysql数据库引擎和他们文件存储介绍 。html
innodb_file_per_table=1 #由于是独立表空间,这里要设置成独立表空间 innodb_force_recovery=1 #设置成1,好像是为了保护表数据
2.建立新数据库,建立要恢复表相同的表结构(表结构必须相同,表名称最好也相同),若是能够查看原来的表,可使用命令:show create table xxx;查看。
3.进入xxx表的数据存储目录,把xxx.ibd复制到~目录下。
4.在mysql中执行alter table xxx discard tablespace; 进入xxx表的数据存储目录,查看xxx.ibd是否已经删除,未删除要手动删除。
5.把要恢复的表的ibd文件复制到xxx表的数据存储目录(至关于替换原来的表的ibd文件),注意把文件的全部者赋给mysql。
6.使用命令:vim -b ~/xxx.ibd,输入:%!xxd,将二进制转换成16进制查看,查看第3行的数据,以下是tablespace id是2
0000020: 0000 0000 0002 0000 0002 0000 0000 0000
7.使用命令:vim -b /var/lib/mysql/test/xxx.ibd,输入:%!xxd,把要恢复的xxx.id文件的这一行一样改为0002(有2个地方要改,第4列和第6列),改为相同的tablespace id(若是tablespace id在2个.ibd文件中不同,不修改为相同的话就会在/var/log/mysqld.log中报错,说他们不同,在mysql命令行行是报engine -1什么的错误),改完后输入:%!xxd -r,将16进制转换成2进制,再输入:x或者:wq保存。
8.在mysql中执行alter table xxx import tablespace; 而后就能够查看表的数据了。
参考:MySQL 5.6.26 经过frm & ibd 恢复数据过程 MySQL ibdata损坏或丢失 经过frm&ibd文件恢复数据 mysql