ITPub博客

首页 > 应用开发 > IT综合 > how to recovery innodb from Pages from .idb (Part III)

how to recovery innodb from Pages from .idb (Part III)

原创 IT综合 作者:Steven1981 时间:2010-08-22 15:38:05 0 删除 编辑
下面我们来看一个实例,用来恢复被TRUNCATE的数据
----------------------------------------------
[@more@]

TEST STEP 0:创建测试环境:
----------------------
MYSQL 5140 at RHEL 5u4 X86_64
use test;
create table recover1 (id int auto_increment , c1 varchar(50), c2 varchar(100) ,primary key (id) ) engine=innodb;
insert into recover1(c1,c2) values ('aaaaaa','bbbbbb');
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;
insert into recover1(c1,c2) select c1,c2 from recover1 ;

SQL> select count(*) from recover1;
+----------+
| count(*) |
+----------+
| 4096 |
+----------+
1 row in set (0.03 sec)

SQL> show create table recover1 G
*************************** 1. row ***************************
Table: recover1
Create Table: CREATE TABLE `recover1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(50) DEFAULT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16359 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

SQL> truncate table recover1 ;
Query OK, 0 rows affected (0.03 sec)

##注意,在这里,你需要在文件被重新覆盖前,对数据所在表空间做一个镜像。否则你的数据也就无法恢复了。 你可以对MYSQL做一个FAST_SHUTDOWN。
如果你使用了:innodb_file_per_table,那么数据表空间文件就是: .ibd.
如果你使用了共享表空间,那么就是ibdata1....
cp /home/mysql/data/mysql/test/recover1.ibd /opt


TEST STEP1:下载工具编码,并解压到指定目录,
----------------------
cd /opt
wget http://launchpad.net/percona-innodb-recovery-tool/trunk/release-0.4/+download/percona-innodb-recovery-tool.tar.gz
tar xzvf percona-innodb-recovery-tool.tar.gz
cd /opt/percona-innodb-recovery-tool/mysql-source
./configure

#注意这里不要MAKE。


TEST STEP2: 找出该表主键的“index_id”,
----------------------
mysql> CREATE TABLE `innodb_table_monitor` (`id` int(11) default NULL) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)

[root@localhost mysql]# tail -20 /home/mysql/data/mysql/master-error.log
... ...
--------------------------------------
TABLE: name test/recover1, id 0 242, columns 6, indexes 1, appr.rows 0
COLUMNS: id: DATA_INT DATA_BINARY_TYPE DATA_NOT_NULL len 4; c1: type 12 len 150; c2: type 12 len 300; DB_ROW_ID: DATA_SYS prtype 256 len 6; DB_TRX_ID: DATA_SYS prtype 257 len 6; DB_ROLL_PTR: DATA_SYS prtype 258 len 7;
INDEX: name PRIMARY, id 0 447, fields 1/5, uniq 1, type 3
root page 3, appr.key vals 0, leaf pages 1, size pages 1
FIELDS: id DB_TRX_ID DB_ROLL_PTR c1 c2

#这里我们可以看到: INDEX: name PRIMARY, id 0 447 。
这个INDEX_ID我们下面会有用。

待续... ...

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/703656/viewspace-1037211/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    127
  • 访问量
    855001