如何从ibd文件中恢复数据

如何从ibd文件中恢复数据,第1张

在使用独立表空间的情况下,如果不慎使得innodb存储引擎的元数据文件ibdata损坏,我们还可以挽救宝贵的数据因为在innodb使用独立表空间的情况下,ibdata文件会记录每个innodb表的id,只要使得ibd中的表id和ibdata文件中记录的表id相同,就能够打开表,读取到数据

#创建表

CREATE TABLE `ibdtest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL COMMENT '表b中的id',
  `content` char(255) NOT NULL COMMENT ' *** 作内容,系统生成',
  `mark` char(255) NOT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

#添加数据
INSERT ibdtest (fid,content,mark) VALUES (1,'1','1'),(2,'2','2');
SELECT  FROM ibdtest;

关闭MySQL将ibdtestibd copy出来,放到其他数据库中来模拟灾难

[root@localhost ~]#/opt/soft/mysql/bin/mysqladmin -p123456 shutdown

120130 18:31:50 mysqld_safe mysqld from pidfile /opt/soft/mysql/60137localdomainpid ended

[1]+ Done                    /opt/soft/mysql/bin/mysqld_safe--defaults-file=/opt/soft/mysql/config/mycnf --user=mysql

[root@localhost ~]# cd /home/soft/mysql/data/test/
[root@localhost test]# ll
total 1296
-rw-rw---- 1 mysql mysql  8612 Jan 18 00:06 afrm
-rw-rw---- 1 mysql mysql 98304 Jan 18 00:24 aibd
-rw-rw---- 1 mysql mysql  8624 Jan 30 08:34 areafrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 08:36 areaibd
-rw-rw---- 1 mysql mysql  8642 Jan 18 00:05 bfrm
-rw-rw---- 1 mysql mysql 98304 Jan 18 00:08 bibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 18:27 ibdtestfrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 18:28 ibdtestibd
-rw-rw---- 1 mysql mysql  8728 Jan  6 16:23 testafrm
-rw-rw---- 1 mysql mysql 98304 Jan 10 04:10 testaibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 14:30 testmcfrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 14:30 testmcibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 13:54 testmefrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 13:55 testmeibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 14:40 testmmfrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 14:45 testmmibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 13:40 testmufrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 13:40 testmuibd
-rw-rw---- 1 mysql mysql  8693 Jan 30 11:08 testmvfrm
-rw-rw---- 1 mysql mysql 98304 Jan 30 11:10 testmvibd
-rw-rw---- 1 mysql mysql  8694 Jan  4 21:55 testuserfrm
-rw-rw---- 1 mysql mysql 98304 Jan  4 22:04 testuseribd
-rw-rw---- 1 mysql mysql  8644 Jan 14 21:55 userfrm
-rw-rw---- 1 mysql mysql 98304 Jan 14 21:55 useribd
[root@localhost test]# cp ibdtestibd /home/download/
[root@localhost test]# cd /home/download/

#vim打开ibd,使用16进制查看
[root@localhost download]# vim -b ibdtestibd 
:%!xxd

从下图中能看到 此表在 当前mysql数据库中的id为0x10,即16

此时,我们假设灾难发生,ibdata损坏…

只剩下了ibdtestibd文,我们跳转到另一个mysql服务器上,用同样的建表语句创建ibdtest表

这时我们打开这个mysql服务器下的ibdtestibd看看:

这个表的id为0x16,即为22,那么,我们只需将原有的ibdtestibd表id修改为0x16即可

出保存的时候一定要记得使用:%!xxd  -r

退出保存

并将修改好的文件覆盖掉新的ibdtestibd即可,

此mysql服务器会认为该表损毁,无法打开,没关系,修改innodb_force_recovery = 6,

重启mysql服务:

Select下,就知道数据是否恢复了没有:

此时,无法执行写 *** 作,应尽快将数据dump出来,修改innodb_force_recovery = 0,重启服务,创建新表后,把数据倒回去就ok了恢复数据就不演示了

一般看ed灯的灯身或者包装上就可以看出来,找到led驱动器的位置,驱动器外壳上会标注它的型号。
要是驱动器上没有写明型号,需要更换驱动器的话,可以把驱动器拆卸下来,拿到专卖店匹配,店员对驱动器型号非常了解,他们会匹配对应的驱动器

我可以告诉你个稍微简单的一个方法 但是还是需要手动改点东西才可以 跟着我做
先把你的歌曲全放到一个文件夹比如D盘这个盘里面 然后从机器的左下角运行CMD 回车 输入d: 回车 再输入der /all >123txt 这样在D盘就有个123这个文件名的文本 打开文本可以批量删除你不要的文字 比如
驱动器 D 中的卷没有标签。
卷的序列号是 637D-3184
D:\ 的目录
后面的2003-01-03 18:17 这些你也要删除的 反正排版好了再打印 比一个一个的去复制粘贴快那么一点点,如果下面有更好的方法的话你就用他们的方法 我是尽力帮你了 祝你成功~

应该中毒了吧,点磁盘的属性看看,已用空间应该还是跟以前的一样的吧,文件应该都还在,是被隐藏起来了
打开winrar应该还是可以看到的
用360杀一下毒,看能不能杀掉,如果不能,则要装其它的杀毒软件杀了
通过修改注册表HKEY_LOCAL_MACHINE\Software\[url=>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13351593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-20
下一篇 2023-07-20

发表评论

登录后才能评论

评论列表(0条)

保存