HBase誤刪資料如何搶救?

2021-10-10 16:19:08 字數 1680 閱讀 3365

相信大家都有這樣的經歷,運算元據庫的時候不小心誤刪除了資料,輕則被公司

處罰,重則開除。別慌,今天較你一招資料即可失而復得,mysql 裡有 binlog

可以幫助我們恢復資料,但是沒有開 binlog 也沒有備份就尷尬了。如果是 hbase,

你沒有做備份誤刪了又如何恢復呢?

資料保護

當誤刪資料發生時候,不管三七二十一,***要務是進入 hbase shell,執行如下

命令:如果誤刪一張表的有多個 family 裡的資料,需要都執行一下:

設定 keep_deleted_cells 為 true 的目的在於防止資料被物理刪除。這裡

有必要解釋一下 hbase 清理資料的原理:

• 首先 hbase 是乙個 lsm 架構,不斷發生著資料檔案的寫入和合併

• 當刪除操作發生時,不會去清理資料檔案中的資料,而是寫入乙個刪除標

記到新檔案中。

• 當某一刻 major compaction 發生時,在合併檔案的同時會根據刪除標記

清理資料,新合併出來的資料檔案不會再有舊資料。

keep_deleted_cells 的作用就是在 major compaction 發生的時候,決定要

不要清理舊資料。這裡需要注意一點,即便 keep_deleted_cells 設定為

true,資料仍然會因為過期而被清理(hbsae 表中的 ttl 屬性)。這個設定無

可厚非,既然過期了,誤刪不誤刪也無所謂了。

資料恢復

資料恢復的前提資料沒有被物理刪除,也就是上文提及的。你只需要在查詢

(scan)的時候,指定 raw 模式來搜尋資料,就能看到被刪除的資料,之後你

要做就是把資料再寫入一次。我們來看乙個簡單的例子,還是以 hbase shell 為

例子:1.首先我們準備幾行資料

2.然後我們刪掉 y 開頭掉資料

3.查一下,現在只有 3 行了

4.現在我們帶上 raw 再次查詢資料,不僅能看到被刪除資料,還能看到刪除標

記。這裡我設定了 timerange, 指定的是資料寫入的時間。對於我這個 case 其

實並沒有什麼用,我只是想說明幾點:

• 即便不設定 raw,也可以通過時間搜尋到被刪資料。比如資料寫入時間

是 t,delete 時間是 t+2,那麼查詢[0, t+1]的話就能看見資料。前提是

設定了 keep_deleted_cells=true

• 如果你後續寫入重複的 key,那你必須指定好 timerange,不然你可能

看到的不是原先刪除的 keyvlaue。 • delete 操作預設的時間不是當前 server 的時間,也不是構造 delete 對

象的時間,而是被刪除的這個 keyvalue 的寫入時間。當然這個得看版

本,測試時候發現 1.x 和 2.x 還是不一樣的,有點坑,還以為高版本不

能僅通過 timerage 搜素被刪資料了。

• 如果你的 delete mark 的時間和資料的時間一樣,那只能通過 raw 看

到。資料恢復完,建議關閉 keep_deleted_cells,節省空間,提高查詢效率。

其他上文使用的是 hbase shell 演示,你可以使用任何語言的 api 完成上面的操作。

如果你使用的是雲 hbase,即便因為 major compaction 物理刪除了資料,只

要你開啟了備份功能,依然可以恢復。

HBase從入門到精通系列 誤刪資料如何搶救?

有時候我們運算元據庫的時候不小心誤刪資料,這時候如何找回?mysql裡有binlog可以幫助我們恢復資料,但是沒有開binlog也沒有備份就尷尬了。如果是hbase,你沒有做備份誤刪了又如何恢復呢?當誤刪資料發生時候,不管三七二十一,第一要務是進入hbase shell,執行如下命令 alter t...

檔案誤刪資料如何找回

永久刪除檔案是很常見的資料恢復故障。在永久刪除檔案後如何恢復資料就顯的尤為重要了,首先我們需要明白,在永久刪除檔案後不能往要恢復的誤刪檔案所在的分割槽,存入任何新的檔案,否則資料覆蓋了就無力回天了。接下來我們還需要了解下具體如何恢復永久刪除檔案的資料,具體請看正文了解。工具 軟體 auroradat...

教你如何搶救丟失的文稿

www.2ppt.cn 我們在編輯文稿時,由於宕機或停電,常常造成文稿的丟失,能不能搶救回來呢?解決方法 啟動ppt2002,執行 工具 選項 命令,開啟 選項 對話方塊,切換到 儲存 標籤下,選中 儲存自動恢復資訊 選項,並在後面的方框中設定乙個時間 為了減少損失,建議時間設定的盡可能短一些,參見...