undrop-for-innodb恢復drop的表
說明:
Undrop 恢復是通過掃描檔案或磁碟裝置,然後解析innodb 資料頁進而恢復丟失的資料,對於drop 、truncate 進行恢復。目前mysql8.0 以後版本暫未提供支援。
準備
https://github.com/twindb/undrop-for-innodb
安裝完之後,會在undrop-for-innodb 目錄下生成stream_parser 和c_parser 檔案
gcc `/mysql/mysql5.7/bin/mysql_config --cflags` `/mysql/mysql5.7/bin/mysql_config --libs` -o sys_parser sys_parser.c
./sys_parser -uroot -pmysql5.7 -S /mysql/mysql5.7/run/mysql.sock -d dictionary ttdb/t1 (用這個)
用make 是會報錯的
二、 模擬 mysql 表誤刪操作
mysql>
mysql>
mysql> create database ttdb;
Query OK, 1 row affected (0.07 sec)
mysql>
mysql> use ttdb;
Database changed
mysql> create table t1(id int);
mysql>
mysql> insert into t1 (id) values (1);
Query OK, 1 row affected (0.35 sec)
mysql>
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> insert into t1 (id) values (2),(3),(4);
Query OK, 3 rows affected (0.36 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
mysql>
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
解析四張關鍵字典表的資料,獲取已刪表的資料結構。
三、恢復
mkdir -p dumps/default
mysql> drop table t1;
Query OK, 0 rows affected (0.02 sec)
[root@kbase data]# cd ttdb/
[root@kbase ttdb]# ls
t1.ibd
[root@kbase ttdb]#
[root@kbase ttdb]# ls
[root@kbase ttdb]# pwd
/mysql/mysql8.21/data/ttdb
[root@kbase undrop-for-innodb-develop]# ./stream_parser -f /mysql/mysql8.21/data/ibdata1
Opening file: /mysql/mysql8.21/data/ibdata1
File information:
ID of device containing file: 64768
inode number: 70038496
protection: 100640 (regular file)
number of hard links: 1
user ID of owner: 1002
group ID of owner: 1002
device ID (if special file): 0
blocksize for filesystem I/O: 4096
number of blocks allocated: 24576
time of last access: 1594864392 Thu Jul 16 09:53:12 2020
time of last modification: 1594957088 Fri Jul 17 11:38:08 2020
time of last status change: 1594957088 Fri Jul 17 11:38:08 2020
total size, in bytes: 12582912 (12.000 MiB)
Size to process: 12582912 (12.000 MiB)
掃描完之後,會在當前目錄下生成相關的目錄:
[root@kbase pages-ibdata1]# ls
FIL_PAGE_INDEX FIL_PAGE_TYPE_BLOB
[root@kbase pages-ibdata1]# cd FIL_PAGE_INDEX
[root@kbase FIL_PAGE_INDEX]# ls
0000000000000001.page 0000000000000005.page 0000000000000014.page 0000000000000020.page 0000000000000026.page
0000000000000002.page 0000000000000011.page 0000000000000015.page 0000000000000021.page 0000000000000033.page
0000000000000003.page 0000000000000012.page 0000000000000016.page 0000000000000024.page 0000000000000040.page
0000000000000004.page 0000000000000013.page 0000000000000017.page 0000000000000025.page 18446744069414584320.page
[root@kbase FIL_PAGE_INDEX]# ls
0000000000000001.page 0000000000000005.page 0000000000000014.page 0000000000000020.page 0000000000000026.page
0000000000000002.page 0000000000000011.page 0000000000000015.page 0000000000000021.page 0000000000000033.page
0000000000000003.page 0000000000000012.page 0000000000000016.page 0000000000000024.page 0000000000000040.page
0000000000000004.page 0000000000000013.page 0000000000000017.page 0000000000000025.page 18446744069414584320.page
./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql >./dumps/default/SYS_TABLES 2>./dumps/default/SYS_
TABLES.sql
./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000002.page -t dictionary/SYS_COLUMNS.sql >./dumps/default/SYS_COLUMNS 2>./dumps/default/S
YS_COLUMNS.sql
475 ./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page -t dictionary/SYS_INDEXES.sql >./dumps/default/SYS_INDEXES 2>./dumps/default/S
YS_INDEXES.sql
476 ./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000004.page -t dictionary/SYS_FIELDS.sql >./dumps/default/SYS_FIELDS 2>./dumps/default/SY
S_FIELDS.sql
create database dictionary;
./sys_parser -uroot -pmysql5.7 -d dictionary ttdb/t1
CREATE TABLE `t1`(
`id` INT NOT NULL,
`name` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci',
`age` INT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10201716/viewspace-2708352/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- oracle drop table purge無備份bbed恢復(3/3)Oracle
- oracle drop table purge無備份bbed恢復(1/3)Oracle
- oracle drop table purge無備份bbed恢復(2/3)Oracle
- 磁碟分割槽表恢復原理
- Oracle RMAN 表空間恢復Oracle
- (Les16 執行資料庫恢復)-表空間恢復資料庫
- oracle資料庫災難挽救應急方案之DDL誤操作恢復(drop)Oracle資料庫
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 表空間TSPITR恢復-實驗
- 【Oracle 恢復表空間】 實驗Oracle
- innobackupex 部分表備份和恢復
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- MySQL5.7下面,誤操作導致的drop table db1.tb1; 的恢復方法:MySql
- 東芝硬碟的故障表現及資料恢復硬碟資料恢復
- 資料庫崩潰恢復表結構的方法資料庫
- 【北亞資料恢復】誤操作導致雲伺服器表被truncate,表內資料被delete的資料恢復資料恢復伺服器delete
- Oracle 12C新特性-RMAN恢復表Oracle
- 使用Xtrabackup完整備份中恢復單表
- SYSTEM 表空間管理及備份恢復
- 如何恢復SSD NVME固態硬碟的資料恢復硬碟資料恢復
- bitlocker如何恢復金鑰 bitlocker恢復金鑰的方法
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- [20190718]12c rman新特性 表恢復.txt
- 【ASK_ORACLE】Oracle表決磁碟丟失後的恢復方法Oracle
- PG 資料庫的 表的不完全恢復的簡易方法資料庫
- Prometheus 告警恢復時,怎麼獲取恢復時的值?Prometheus
- 照片恢復軟體是如何恢復數位相機照片的?
- 怎樣用恢復驅動器來恢復win10 使用恢復驅動器恢復win10系統的步驟Win10
- 資料恢復:AMDU資料抽取恢復資料恢復
- postgreSQL 恢復至故障點 精準恢復SQL
- 伺服器資料恢復—雲伺服器mysql資料庫表資料被delete的資料恢復案例伺服器資料恢復MySql資料庫delete
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- mysql 從 frm 檔案恢復 table 表結構的3種方法MySql
- 請恢復我的帖子
- 教你一招,告警恢復時如何拿到恢復時的值?
- Vsan資料恢復—Vsan資料恢復案例資料恢復
- 【Vsan資料恢復】Vsan資料恢復案例資料恢復