Mysql InnoDB恢復資料

2021-10-03 10:59:35 字數 1868 閱讀 1844

一.安裝:

.tar -xvf percona-data-recovery-tool-for-innodb-0.5.tar.gz

.cd percona-data-recovery-tool-for-innodb-0/mysql-source/

../configure

.cd percona-data-recovery-tool-for-innodb-0

.make

二.解析ibd檔案:

此過程會將表的idb檔案解析為很多的page,innodb的page分為兩大部分,一部分一級索引部分(primary key),另一部分為二級索引部分(secondary key),所以解析出來的idb包括了主鍵資料和索引資料兩大部分(如果該錶有多個二級索引,則會生成多個檔案)

./page_parser -5 -f t_bibasic_storage.ibd

引數解釋:

-5:代表 row format為compact

-f:代表要解析的檔案

結果如下:

pages-1377707810/fil_page_index

0-161 0-325 0-463 0-464 0-465

可以看到t_bibasic_storage.ibd解析出來5個檔案(161為主鍵索引的index_id,325,463,464,465為二級索引的index_id,該id可以通過開啟innodb_table_monitor知曉)

三.生成表定義:

由於該工具在解析資料pages的時候,需要獲得該table的表結構定義,所以需要執行如下命令:

./create_defs.pl –host 60.216.75.45 –port 3306 –user root –password qwehdysjsb20130413 –db didb –table t_bibasic_storage >include/table_defs.h

上面的命令會將t_bibasic_storage表的表結構定義傳入到table_defs.h中,在生成了表結構定義後,重新make該恢復工具:

.make

四.開始恢復pages中刪除的資料:

在重新編譯工具後,執行如下命令:

./constraints_parser -5 -d -f pages-1377707810/fil_page_index/0-161 >/tmp/t_bibasic_salessend.sql

引數:-5 -f的引數和page_parser相同;

-d:該引數的含義為代表恢復刪除的資料頁;

恢復完成後生成如下語句和檔案:

load data infile 『/tmp/t_bibasic_proinfo.dmp』 replace into tablet_bibasic_proinfofields terminated by 『\t』 optionally enclosed by 『」『 lines starting by 『t_bibasic_proinfo\t』 (id, procode, skuoid, skucode, skuname, catatt, dutydepoid, dutydepname, seasonatt, brandatt, prostatus, choosedate, syear, smonth, sday, created, unioncomcode);

/tmp/t_bibasic_salessend.sql 該檔案就是我們需要load data的文字檔案;

總結:1)。該恢復工具只支援innodb儲存引擎,檔案的格式需要為:compact

2)。資料被誤刪除後,需要盡快將保護現場,停止資料庫,把idb檔案拷貝出來,防止ibd檔案寫入資料被覆蓋(筆者恢復的乙個表中,由於資料刪除後,表中仍有大量寫入,導致大部分資料沒有恢復出來);

3)。千叮囑萬囑咐,資料庫的備份重於泰山;

oracle 恢復資料

備份資料 create table plan tem 20150812 as select from z fm cashplan 查詢操作錯誤的表的移動功能是否開啟 enable為開啟 select row movement,t.from user tables t where table name...

Oracle恢復資料

今天同事誤將oracle表中資料刪除 當時心裡就是涼涼 立刻上網搜尋有沒有恢復資料的方法 好在oracle的強大以及網路的發達 恩 廢話就這麼多 其實恢復的方法很簡單 首先,執行表記錄恢復 一般先根據時間進行查詢,查詢語句模式為 select from tb as of timestamp to t...

binlog恢復資料

記一次誤刪恢復資料 通過binlog日誌檔案生成時間和誤操作刪除資料的時間對比,分析出生成到哪個檔案中 兩種恢復方式 1 通過時間段 usr local mysql bin mysqlbinlog start datetime 2019 10 11 19 00 00 stop datetime 20...