利用MySQL中InnoDB数据文件中的恢复数据
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-28 16:49:05 浏览: 评论:0
1.简述恢复原理
因为文档中较为详细的描述,这里只简单说明。所有InnoDB的数据都是索引的方式组织的,而且所有的数据都是存储在16KB的数据块中。恢复的过程分几步,分解所有数据文件为单个16KB大小的页面,根据每个页面的标记的数据起点开始尝试匹配,如果与给定表定义的size合适,认为匹配成功,则输出记录。
2.并行的恢复
数据恢复通常是争分夺秒的,PDRTI工具本身是一个基础工具,如果使用该工具做做串行恢复,时间会非常长,通过简单的shell脚本可以让constraints_parser脚本并行工作,这样可以大大缩短数据的恢复时间。根据实际经验,机器稍微好点,实际恢复时间可以缩短到串行的二十分之一。也就是说,原来需要40小时,通过并行可能2个小时就可以了。
以下是两个并行恢复的脚本,供参考,代码如下:
- #!/bin/bash
- ws=/u01/recovery
- pagedir=/u01/recovery/pages-1372436970/FIL_PAGE_INDEX
- logdir=/u01/recovery/log
- rectool=/u01/recovery/percona-data-recovery-tool-for-innodb-0.5/constraints_parser
- cd `dirname $rectool`
- count=0
- page_count=353894
- page_done=0
- startdate=`date +%s`
- for d1 in `ls $pagedir`
- do
- count=$(($count+1))
- echo "in page $d2 at dir $d1" > $logdir/$count.log
- thedate=`date +%s`
- echo "$page_done / $page_count at $thedate from $startdate"
- total=`ls -l $pagedir/$d1/|wc -l`
- page_done=$(($page_done+$total))
- threads=`ps axu|grep parser_jobs|grep -v grep|wc -l`
- echo $threads
- while [ $threads -gt 48 ];
- do
- sleep 1
- threads=`ps axu|grep parser_jobs|grep -v grep|wc -l`
- done
- $ws/parser_jobs.sh $pagedir/$d1 > $ws/job.log 2>&1 &
- done#!/bin/bash
- pagedir=/u01/recovery/pages-1372436970/FIL_PAGE_INDEX
- logdir=/u01/recovery/log
- rectool=/u01/recovery/percona-data-recovery-tool-for-innodb-0.5/constraints_parser
- logfile="$logdir/`basename $1`.log"
- echo "$1" > $logfile
- if [ -d $1 ];then
- for d2 in `ls $1`
- do //phpfensi.com
- $rectool -5 -f $1/$d2 >> $logfile 2>/dev/null
- done
- fi
3.从索引中恢复
如果知道数据表的索引结构,如果数据部分损坏,但是索引部分完整,可以通过这个办法提取出来更多的字段信息.
4.紧急情况下的问题处理
这次下厨房的技术总结中提到,"第一时间停止MySQL防止硬盘继续写入这个应急措施是错误的",正常如果进程没有被关闭,进程所打开的文件是不会被覆盖的,可以通过从/proc文件系统拷贝的方式恢复出当前仍然打开的文件(参考:Recovering files from /Proc),如果数据文件和日志文件都能够cp出来,那么有希望让MySQL自己启动,并根据事务日志恢复出当前一致的数据.
Tags: InnoDB数据文件 MySQL恢复数据
相关文章
- ·mysql恢复数据学习笔记(2014-10-01)
- ·mysql 通过bin-log恢复数据方法详解(2014-10-02)
- ·Mysql备份压缩及恢复数据库方法总结(2014-10-04)
- ·mysql日志恢复数据方法介绍(2014-10-08)
- ·mysql恢复数据数据出现Variable sql_mode cant 解决方法(2014-10-10)
- ·MySQL数据库无法启动实现数据恢复的例子(2015-04-20)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)