What Are The Drone Anti-jamming Systems Technology?
Undrop for InnoDB
1. UNDROP
FOR
INNODB
Toolkit
for
MySQL
Data
Recovery
https://twindb.com/
2. What’s
InnoDB
Table?
CREATE
TABLE
`actor`
(
`actor_id`
smallint(5)
unsigned
NOT
NULL,
`first_name`
varchar(45)
NOT
NULL,
`last_name`
varchar(45)
NOT
NULL,
`last_update`
timestamp
NOT
NULL,
PRIMARY
KEY
(`actor_id`),
KEY
`idx_actor_last_name`
(`last_name`)
)
ENGINE=InnoDB;
3. PRIMARY
index
-‐
B+
Tree
Structure
1
100
page
2
page
3
1
50
page
2
page
3
100
150
page
2
page
3
actor_id
1
2
…
49
first_name
A
C
E
last_name
K
D
F
last_update
X
Y
…
Z
actor_id
50
51
…
99
first_name
G
I
K
last_name
H
J
L
last_update
X
Y
…
Z
4. Table
in
File
System
#
ls
-‐la
/var/lib/mysql/sakila/actor.*
-‐rw-‐rw-‐-‐-‐-‐
1
mysql
mysql
actor.frm
-‐rw-‐rw-‐-‐-‐-‐
1
mysql
mysql
actor.ibd
5. InnoDB
Dictionary
SYS_TABLES
mysql>
SELECT
*
FROM
SYS_TABLES
WHERE
NAME
=
'sakila/actor'G
***************************
1.
row
***************************
NAME:
sakila/actor
ID:
2642
N_COLS:
4
TYPE:
41
MIX_ID:
0
MIX_LEN:
80
CLUSTER_NAME:
SPACE:
2337
1
row
in
set
(0.00
sec)
16. Recover
InnoDB
Dictionary
#
./stream_parser
-‐f
/var/lib/mysql/ibdata1
Opening
file:
/var/lib/mysql/ibdata1
Size
to
process:
12582912
(12.000
MiB)
All
workers
finished
in
0
sec
#
./recover_dictionary.sh
Generating
dictionary
tables
dumps...
OK
Creating
test
database
...
OK
Creating
dictionary
tables
in
database
test:
SYS_TABLES
...
OK
SYS_COLUMNS
...
OK
SYS_INDEXES
...
OK
SYS_FIELDS
...
OK
All
OK
Loading
dictionary
tables
data:
SYS_TABLES
...
46
recs
OK
SYS_COLUMNS
...
304
recs
OK
SYS_INDEXES
...
96
recs
OK
SYS_FIELDS
...
118
recs
OK
All
OK
17. Introducing
sys_parser
#
yum
install
mysql-‐community-‐devel.x86_64
#
make
sys_parser
/usr/bin/mysql_config
cc
`mysql_config
-‐-‐cflags`
`mysql_config
-‐-‐libs`
-‐o
sys_parser
sys_parser.c
#
./sys_parser
sakila/actor
CREATE
TABLE
`actor`(
`actor_id`
SMALLINT
UNSIGNED
NOT
NULL,
`first_name`
VARCHAR(45)
CHARACTER
SET
'utf8'
COLLATE
'utf8_general_ci'
NOT
NULL,
`last_name`
VARCHAR(45)
CHARACTER
SET
'utf8'
COLLATE
'utf8_general_ci'
NOT
NULL,
`last_update`
TIMESTAMP
NOT
NULL,
PRIMARY
KEY
(`actor_id`)
)
ENGINE=InnoDB;
18. Getting
index_id
from
Dictionary
mysql>
SELECT
SYS_TABLES.NAME,
SYS_INDEXES.NAME,
SYS_INDEXES.ID
FROM
SYS_TABLES
LEFT
JOIN
SYS_INDEXES
ON
SYS_TABLES.ID
=
SYS_INDEXES.TABLE_ID
WHERE
SYS_TABLES.NAME
=
'sakila/actor';
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐+
|
NAME
|
NAME
|
ID
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐+
|
sakila/actor
|
PRIMARY
|
22
|
|
sakila/actor
|
idx_actor_last_name
|
23
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐+
2
rows
in
set
(0.00
sec)
19. Checklist
before
Launch
ü InnoDB
pages
(credit
to
stream_parser)
ü Table
Structure
(credit
to
sys_parser)
ü index_id
(InnoDB
dictionary)