一次成功的数据恢复

背景: 有次脑袋抽了,把数据表的数据都删除了,而且还没有开启日志。后来找到一个Linux软件:Percona Data Recovery Tool ,使用它终于恢复了大部分数据。

mysql -uroot -p123456;

use my;

CREATE TABLE `exam_file` (
  `id` int(11) NOT NULL auto_increment,
  `no` varchar(20) default NULL,
  `emp_id` int(11) default NULL,
  `emp_name` varchar(20) default NULL,
  `sto_name` varchar(20) default NULL,
  `mod_id` int(11) default NULL,
  `mod_name` varchar(20) default NULL,
  `question` text,
  `answer` text,
  `result` text,
  `remarks` text NOT NULL,
  `follow` text NOT NULL,
  `starttime` bigint(20) default NULL,
  `endtime` bigint(20) default NULL,
  `score` float(11,0) default NULL,
  `auditor` varchar(20) default NULL,
  `auditor_time` datetime default NULL,
  `is_delete` tinyint(1) default '0' COMMENT '0-...1-..',
  PRIMARY KEY  (`id`),
  KEY `no` (`no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

cd /root/percona-data-recovery-tool-for-innodb-0.5/;

./page_parser -5 -f /root/ibd/ibdata1;

find / -name ibdata1; #搜索原有的ibdata1文件


##################################### 并不需要这一步 ######################################
#使用需恢复的ibdata1替换现ibdata1
cd /var/lib/mysql/; mv -f ibdata1 ibdata1_ori; cp -f /root/ibd/ibdata1 /var/lib/mysql/;
#####################################################################################

./create_defs.pl -host 127.0.0.1 -port 3306 -user root -password 123456 -db my -table exam_file >include/table_defs.h;

cat include/table_defs.h; #检查生成的表结构文件是否正确,如果生成不成功,检查表引擎是否是InnoDB,再有问题只能调试create_defs.pl的代码了。

make;

find pages-1465258009/FIL_PAGE_INDEX/0-36/ -type f -name '*.page' | sort -n | xargs cat > pages-1465258009/FIL_PAGE_INDEX/0-36/customer_pages_concatenated;

./constraints_parser -5 -f pages-1465258009/FIL_PAGE_INDEX/0-36/customer_pages_concatenated >> dumps/default/exam_file_1;

#执行上面命令会输出如下代码,但mysql执行会出错,替代为再下一条命令
LOAD DATA INFILE '/root/percona-data-recovery-tool-for-innodb-0.5/dumps/default/exam_file' REPLACE INTO TABLE `exam_file` FIELDS TERMINATED BY '	' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY 'exam_file	' (id, no, emp_id, emp_name, sto_name, mod_id, mod_name, question, answer, result, remarks, follow, starttime, endtime, score, auditor, auditor_time, is_delete);
LOAD DATA LOCAL INFILE '/root/percona-data-recovery-tool-for-innodb-0.5/dumps/default/exam_file' REPLACE INTO TABLE `exam_file` FIELDS TERMINATED BY '	' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY 'exam_file	' (id, no, emp_id, emp_name, sto_name, mod_id, mod_name, question, answer, result, remarks, follow, starttime, endtime, score, auditor, auditor_time, is_delete);

mysql -uroot -p123456;

use my;

LOAD DATA LOCAL INFILE '/root/percona-data-recovery-tool-for-innodb-0.5/dumps/default/exam_file' REPLACE INTO TABLE `exam_file` FIELDS TERMINATED BY '	' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY 'exam_file	' (id, no, emp_id, emp_name, sto_name, mod_id, mod_name, question, answer, result, remarks, follow, starttime, endtime, score, auditor, auditor_time, is_delete);

参考:

如何从IBData中恢复MySQL数据库 - MySQL及其它开源数据库-ITPUB论坛-it168旗下专业技术社区

Percona Data Recovery Tool 单表恢复 - yayun - 博客园

原文地址:https://www.cnblogs.com/chy1000/p/5570838.html