使用ibd文件恢复innodb数据
来源:互联网 发布:vb获取cpu序列号 编辑:程序博客网 时间:2024/05/21 07:12
mysql常用引擎有两种,myisam和innodb。myisam备份容易,直接备份.frm,.MYD,.MYI文件,然后再复制粘贴到目标数据库文件夹即可。但是innodb则不可以,即使你把.frm,.ibd文件放到目标数据库文件夹,也不是查看该数据表。那么,能否使用.ibd文件恢复innodb数据表呢?
以下则是使用ibd文件恢复数据的方法:
注:使用ibd文件恢复数据的前提是,需要恢复的表的结构和表名你是需要知道的。
1. 安装mysql环境
使用phpStudy安装新的php和mysql环境。(此处用phpStudy是因为搭建环境快捷,且可以一个系统可装多个mysql环境)
2. 设置mysql配置文件
设置mysql配置文件,my.ini
设置错误日志 log-err=”D:/phpStudy/MySQL/data/error.err”
设置innodb独立空间 innodb-file-per-table=1
重启mysql服务
3. 建立同名同结构数据表
在新的mysql中建立数据库,建立数据表,该数据表应与需恢复的数据表结构和表名一致。
如我的ibd文件为:members.ibd
而我创建的数据表为:members
另:该表无需有数据
4. 分离表结构和数据
分离数据表的数据和结构:ALTER TABLE members DISCARD TABLESPACE;
此时我们会看到该数据表的ibd文件消失了。
未分离时:
分离后:
5.表数据与表结构建立联系
把要恢复的ibd文件复制到新的数据表文件夹中,然后使用:ALTER TABLE members IMPORT TABLESPACE;来建立关系。 此时有可能会报错,报错内容为:
[SQL]ALTER TABLE members IMPORT TABLESPACE;
[Err] 1030 - Got error -1 from storage engine
此时需要查看mysql错误日志,发现:
InnoDB: how you can resolve the problem.
170728 11:10:23
InnoDB: Error: tablespace id and flags in file ‘.\blueshop3\members.ibd’ are 4 and 0, but in the InnoDB
InnoDB: data dictionary they are 3 and 0.
错误表示两个表的tablespace id不一致。旧数据表的tablespace id为4,但目前的数据表的tablespace id为3。那么接下来要做的是使tablespace id一致。
6. 比较tablespace id,使得tablespace id一致
如果新的表的tablespace id 小于待恢复表的tablespace id,则可以通过创建表来增加tablespace id,最后在待恢复表的tablespace id处再创建一次members表,再分离表结构和表数据,把待恢复的ibd文件复制到新的表文件夹中,再把结构和数据建立关系,如果此时没报错,则关系已建立完成。
批量生成数据表可使用php脚本来完成:
<?php $dsn = "mysql:host=localhost;port=3306;charset=utf8;dbname=blueshop"; $user = 'root'; $password = 'root'; $pdo = new PDO($dsn,$user,$password); $sql = ""; for($i=1;$i<12;$i++){ $sql .= "create table i{$i}(id int)engine innodb;"; } $pdo->exec($sql);?>
如果新的表的tablespace id 大于待恢复表的tablespace id,则有两种方案,第一,重建一个mysql服务,则tablespace id就会从1开始,则必定小于待恢复表的tablespace id。第二,找到待恢复表的tablespace id所对应的那个表,然后把这个表改成与待恢复表的结构和表名。
7. 备份数据
关系建立完成,但还是不能查询数据,此时需要更改mysql配置文件, 添加或修改:innodb_force_recovery=5,不行则1-6都尝试一遍。待数据可查询时,立即备份即可。
- 使用ibd文件恢复innodb数据
- mysql innodb只有 .frm .ibd 文件 如何恢复数据
- 恢复mysql数据--使用frm和ibd文件
- 亲测Mysql表结构为InnoDB类型从ibd文件恢复数据
- MySQL表结构为InnoDB类型从ibd文件恢复数据
- MySQL表结构为InnoDB类型从ibd文件恢复数据
- Mysql表结构为InnoDB类型从ibd文件恢复数据
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
- 亲测Mysql表结构为InnoDB类型从ibd文件恢复数据
- mysql frm ibd 文件恢复数据
- MySQL 从 .ibd 文件恢复数据
- MySQL借助ibd文件恢复数据技巧?
- MySQL借助ibd文件恢复数据技巧
- [MySQL]用ibd文件恢复数据库数据
- 数据恢复(2)- ibd
- mysql innodb ibd frp恢复数据库
- MySQL:如何从ibd文件中恢复数据
- mysql数据库通过ibd 恢复数据
- 用Apache Spark进行大数据处理之入门介绍(1)
- Android系统基础介绍
- 随笔
- String,StringBuffer,StringBuilder之再体验
- androidstudio去除Button自带阴影效果
- 使用ibd文件恢复innodb数据
- 0728 Java循环语句练习-购物单
- Struct 2.5 使用通配符提示无法映射问题
- QT查找监控FTP
- 1+2.Hello,python--17/7/29
- 仿视频弹幕实战
- HDU 6048 思维+找规律
- java类加载器 -- 双亲委托机制
- Find MaxXorSum NBUT