mysql通过idb文件恢复数据
来源:互联网 发布:网络歌手的特点 编辑:程序博客网 时间:2024/05/18 03:33
在使用独立表空间的情况下,如果不慎使得innodb存储引擎的元数据文件ibdata损坏,我们还可以挽救宝贵的数据.因为在innodb使用独立表空间的情况下,ibdata文件会记录每个innodb表的id,只要使得ibd中的表id和ibdata文件中记录的表id相同,就能够打开表,读取到数据.
vim打开ibd,使用16进制查看
# vim -b /backup/a.ibd
vim打开ibd,使用16进制查看
# vim -b /backup/a.ibd
:%!xxd
0000000: 5be9 e0b7 0000 0000 0000 0000 0000 0000 [...............
0000010: 0000 0013 607f 5758 0008 0000 0000 0000 ....`.WX........
0000020: 0000 0000 0c0a 0000 0c0a 0000 0000 0000 ................
0000030: 03c0 0000 0280 0000 0000 0000 0026 0000 .............&..
0000040: 0002 0000 0000 01de 0000 0000 0206 0000 ................
0000050: 0001 0000 0000 00ee 0000 0000 00ee 0000 ................
0000060: 0001 0000 0000 009e 0000 0000 009e 0000 ................
0000070: 0000 0000 0007 0000 0000 ffff ffff 0000 ................
0000080: ffff ffff 0000 0000 0001 0000 0002 0026 ...............&
标红的地方就是表id。现在新建数据库test,将表结构导入进去,同样进行16进制查看,就能找到对应的表id
# vim -b /data/a.ibd
0000000: 3277 242f 0000 0000 0000 0000 0000 0000 2w$/............
0000010: 0000 0013 5fbc 2391 0008 0000 0000 0000 ...._.#.........
0000020: 0000 0000 00c0 0000 00c0 0000 0000 0000 ................
0000030: 1600 0000 1480 0000 0000 0000 002e 0000 ................
0000040: 0002 0000 0000 0d1e 0000 0000 0d46 0000 .............F..
把现在有数据的/backup/下的表id改成新建的表id
退出保存的时候一定要记得使用:
%!xxd -r
数据越大时间越长
再把/backup/a.ibd复制过去/data/
此mysql服务器会认为该表损毁,无法打开,没关系,修改innodb_force_recovery = 6,
然后重启mysql服务
0000000: 5be9 e0b7 0000 0000 0000 0000 0000 0000 [...............
0000010: 0000 0013 607f 5758 0008 0000 0000 0000 ....`.WX........
0000020: 0000 0000 0c0a 0000 0c0a 0000 0000 0000 ................
0000030: 03c0 0000 0280 0000 0000 0000 0026 0000 .............&..
0000040: 0002 0000 0000 01de 0000 0000 0206 0000 ................
0000050: 0001 0000 0000 00ee 0000 0000 00ee 0000 ................
0000060: 0001 0000 0000 009e 0000 0000 009e 0000 ................
0000070: 0000 0000 0007 0000 0000 ffff ffff 0000 ................
0000080: ffff ffff 0000 0000 0001 0000 0002 0026 ...............&
标红的地方就是表id。现在新建数据库test,将表结构导入进去,同样进行16进制查看,就能找到对应的表id
# vim -b /data/a.ibd
0000000: 3277 242f 0000 0000 0000 0000 0000 0000 2w$/............
0000010: 0000 0013 5fbc 2391 0008 0000 0000 0000 ...._.#.........
0000020: 0000 0000 00c0 0000 00c0 0000 0000 0000 ................
0000030: 1600 0000 1480 0000 0000 0000 002e 0000 ................
0000040: 0002 0000 0000 0d1e 0000 0000 0d46 0000 .............F..
把现在有数据的/backup/下的表id改成新建的表id
退出保存的时候一定要记得使用:
%!xxd -r
数据越大时间越长
再把/backup/a.ibd复制过去/data/
此mysql服务器会认为该表损毁,无法打开,没关系,修改innodb_force_recovery = 6,
然后重启mysql服务
然后到数据库去查询a,数据就恢复了
此时,无法执行写操作,应尽快将数据dump出来,修改innodb_force_recovery = 0,重启服务,创建新表后,把数据导回去就ok了.
测试单表可以后,开始写脚本批量进行改进制,但是16进制转回二进制十分慢,修复一个库目录大小885M,花了近5个小时才完成。当然,与机器硬件配置有关。
此时,无法执行写操作,应尽快将数据dump出来,修改innodb_force_recovery = 0,重启服务,创建新表后,把数据导回去就ok了.
测试单表可以后,开始写脚本批量进行改进制,但是16进制转回二进制十分慢,修复一个库目录大小885M,花了近5个小时才完成。当然,与机器硬件配置有关。
- mysql通过idb文件恢复数据
- MySQL利用frm和idb文件进行数据恢复
- MySql数据库通过idb和frm恢复
- mysql通过mysql-bin文件恢复数据
- MySql通过二进制日志文件恢复数据
- MySql通过二进制日志文件恢复数据
- mysql 通过data文件下来恢复数据
- mysql 通过data文件下来恢复数据
- mysql通过data文件恢复数据
- 重装系统之后的mysql数据恢复,innodb神马的都不重要ibdata idb也都是浮云
- mysql 数据恢复 通过binlog恢复数据
- mysql通过Binlog恢复数据到sql文件实战
- mysql通过binlog恢复数据
- mysql通过bin_log恢复数据
- mysql通过Binlog恢复数据
- mysql通过binlog恢复数据
- mysql通过binlog恢复数据
- MySQL日志文件恢复数据
- 奇怪的宏
- 使用ifstream和getline读取文件内容[c++]
- 写好Hive 程序的五个提示
- WPF里动态切换不同的模板
- lua 常用网址
- mysql通过idb文件恢复数据
- 关与上拉和下拉电阻
- 阶乘运算实现方法
- .net post 任何数据类型到网站
- Mysql自增主键ID调整|重新排序
- vimrc文件
- 开发Hadoop应用程序
- 地址
- ubuntu server and ubuntu desktop 的区别