背景: 有次脑袋抽了,把数据表的数据都删除了,而且还没有开启日志。后来找到一个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);
参考: