硬鏈結恢復誤刪之分割槽

2021-10-09 21:27:32 字數 2649 閱讀 6912

分割槽表過大,歷史資料沒刪除,和研發溝商量好保留策略後對相關分割槽資料進行備份、清理。主庫上業務較繁忙,從庫上暫無業務,故打算先在從庫上刪,待主備切換之後再刪老主庫上的資料。(刪除前已完成mysqldump備份)

由於數張表要求的保留期限不一樣,有的要求保留19年10月1日之後的資料,有的需要保留19年1月1日之後的資料。 為了安全, 也為了刪除效率,在執行 alter 語句刪除之前,先通過指令碼將每個分割槽的 .ibd 檔案做了乙個硬鏈結。在指令碼中,誤將一張保留需求是 19年1月1日的表 的時間指定成了 19年10月1日。因此,做硬鏈結的時候多鏈了9個月的分割槽。悲催的是刪除的時候指令碼指定的時間也範了同樣的錯誤,因此多刪了9個月的分割槽(當然這些分割槽也是一年多前的分割槽了,資料早已不會變化)。

在誤操作之後,突然意識到好像搞錯了, 然後就想辦法拯救。 因為從庫上暫時沒放業務,因此我又充分的時間進行修復。 然後又因為有備份,主庫的資料也沒刪除,還有檔案的硬鏈結在,所以心裡也不是很慌。 此表9個月的資料大約30g, 刪除之前剛做過邏輯備份,目測用備份恢復也用不了多久,但我想希望嘗試一下通過硬鏈結還原,所以就有了接下來的操作。

恢復方案借鑑mysql 傳輸表空間,與之不同的是,我這裡不需要去主庫上生成 ***.cfg 檔案。 恢復思路如下:

1、通過 reorganize **第乙個分割槽(p20191001),把誤刪的分割槽結構補回來。

2、通過 discard語句 ,將新生成的相關分割槽的.ibd 檔案丟棄。

3、用硬鏈結回鏈到原資料檔案目錄。

4、通過 import partition 語句匯入相關分割槽 。

test>show create table emp_test \g

*************************** 1. row ***************************

table: emp_2

create table: create tableemp_test(

idbigint(20) unsigned not null auto_increment,

xvarchar(500) collate utf8mb4_bin not null,

yvarchar(500) collate utf8mb4_bin not null,

primary key (id)

) engine=innodb auto_increment=3000 default charset=utf8mb4 collate=utf8mb4_bin

/*!50500 partition by range columns(id)

(partition p1 values less than (1000) engine = innodb,

partition p2 values less than (2000) engine = innodb,

partition p3 values less than (3000) engine = innodb) */

1 row in set (0.00 sec)

ln /data/mysql/mydata3306/test/emp_test#p#p1.ibd /data/bak/emp_test#p#p1.ibd_hdlk

ln /data/mysql/mydata3306/test/emp_test#p#p2.ibd /data/bak/emp_test#p#p2.ibd_hdlk

alter table emp_test drop partition p1 ;

alter table emp_test drop partition p2 ;

alter table emp_test reorganize partition p3 into(partition p2 values less than (2000),partition p3 values less than (3000) ) ;

alter table emp_test reorganize partition p2 into(partition p1 values less than (1000),partition p2 values less than (2000) ) ;

alter table emp_test discard partition p1, p2 tablespace;

ln /data/bak/emp_test#p#p1.ibd_hdlk /data/mysql/mydata3306/test/emp_test#p#p1.ibd

ln /data/bak/emp_test#p#p2.ibd_hdlk /data/mysql/mydata3306/test/emp_test#p#p2.ibd

alter table emp_test import partition p1, p2 tablespace;

至此,表的結構和資料就已恢復。執行匯入時可能會看到 warning 1810 *** 之類的警告,不影響資料的正常訪問,可忽略。

誤刪檔案恢復

1,windows系統如果 站中有被刪除的檔案,那麼直接恢復就好 2,如果 曾在eclipse或者idea等工具中編輯過,那麼工具會自動儲存本地記錄,可以從本地記錄中恢復。例如eclipse中,右鍵專案名稱,選擇 restore from local history,在彈出框中可以選擇對檔案進行恢復...

Oracle誤刪恢復

query deleted datarows select from 表名 as of timestamp to timestamp 刪除時間點 yyyy mm dd hh24 mi ss needs auth flash any table data table flashback alter t...

軟鏈結 硬鏈結

硬鏈結與軟鏈結的聯絡與區別 我們知道檔案都有檔名與資料,這在 linux 上被分成兩個部分 元資料 metadata 是檔案的附加屬性,如檔案大小 建立時間 所有者等資訊。使用者資料 user data 即檔案資料塊 data block 資料塊是記錄檔案真實內容的地方 元資料則在 linux 中,...