如何恢复mysql inno db 损毁的数据库表内容 ?

一次机器的强制关机,导致了服务器mysql数据库启动失败, 说是数据库因为关机问题,数据写入不正常, 无法启动, 使用mysql的数据库恢复功能没能成功

因为自己当时不知道数据库自己恢复的条件,只拷贝备份了数据库目录, 并没有备份idb和idb的log1,log2两个文件,所以自动恢复没法进行,基本上是数据

已经丢失了

网上去搜索发现有个恢复工具, 开源的 就拿试试, 果然最终还是解救到了数据.

基本思路是, inno db引擎的数据库文件是 frm放 表项索引, idb里面是表的具体内容, 只要idb文件在, 一般都是可以恢复的

步骤如下:

    1. 使用工具 将idb文件分割得到很多page文件
    1. 然后page文件全部cat到一个大文件
  • 3. 找到你的表的结构: 我这里因为是服务器还在, 可以从原来正确的数据库里面读取到表的结构, 就是知道表当时是如何创建的

,使用 show table create <tablename>; sql 命令 就可以得到.

这里工具里面有个脚本, 配置上你的参数, 叫自己去读,然后会生成一个头文件, 这个下面需要用来编译提取这个表用的解析器.

但是我的情况是数据库新建的表没有使用innodb格式了,所以需要将那个脚本里面的判断是不是innodb的语句注释,要不然头文件是空的.

    1. make继续生成解析器
    1. 使用解析器提取数据到tsv文件
    1. 使用sql语句将tsv文件内容导入数据库的表中,完成数据恢复.

这里注意: tsv文件需要放到你的数据库文件所在的目录里面.

具体, 还是看官方的手册和这个绝对指导意义的文章吧 :

http://www.linezing.com/blog/?p=1371

官方wiki详细手册:

http://www.percona.com/docs/wiki/innodb-data-recovery-tool:mysql-data-recovery:start

注意官方的wiki是分了几个小节,每个小节一个页面.

另外.我把这个繁琐的过程写了个临时的脚本, 基本都可以工作: 需要者下载下来自己根据情况调整, 脚本的内容反应了整个完整过程:

recovery_data.sh