1. 程式人生 > >HBase從入門到精通系列:誤刪數據如何搶救?

HBase從入門到精通系列:誤刪數據如何搶救?

防止 ebo 一次 目的 排名 一個 只需要 操作數 googl

雲棲君導讀:有時候我們操作數據庫的時候不小心誤刪數據,這時候如何找回?mysql裏有binlog可以幫助我們恢復數據,但是沒有開binlog也沒有備份就尷尬了。如果是HBase,你沒有做備份誤刪了又如何恢復呢?

數據保護

技術分享圖片

當誤刪數據發生時候,不管三七二十一,第一要務是進入hbase shell,執行如下命令:

技術分享圖片

如果誤刪一張表的有多個family裏的數據,需要都執行一下:

alter ‘tt‘, { NAME=> ‘f1‘, KEEP_DELETED_CELLS=> TRUE }, { NAME=> ‘f2‘, KEEP_DELETED_CELLS=> TRUE }

設置 KEEP_DELETED_CELLS 為 True 的目的在於防止數據被物理刪除。這裏有必要解釋一下HBase清理數據的原理:

KEEP_DELETED_CELLS 的作用就是在major compaction發生的時候,決定要不要清理舊數據。這裏需要註意一點,即便 KEEP_DELETED_CELLS 設置為True,數據仍然會因為過期而被清理(HBsae表中的TTL屬性)。這個設定無可厚非,既然過期了,誤刪不誤刪也無所謂了。

數據恢復

技術分享圖片

數據恢復的前提數據沒有被物理刪除,也就是上文提及的。你只需要在查詢(Scan)的時候,指定raw模式來搜索數據,就能看到被刪除的數據,之後你要做就是把數據再寫入一次。我們來看一個簡單的例子,還是以hbase shell為例子:

1.首先我們準備幾行數據

技術分享圖片

2.然後我們刪掉y開頭掉數據

技術分享圖片

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

技術分享圖片

4.現在我們帶上raw再次查找數據,不僅能看到被刪除數據,還能看到刪除標記。

技術分享圖片

這裏我設置了TIMERANGE, 指定的是數據寫入的時間。大學排名對於我這個case其實並沒有什麽用,我只是想說明幾點:

數據恢復完,建議關閉KEEP_DELETED_CELLS,節省空間,提高查詢效率。

其他

技術分享圖片

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

如果你使用的是雲HBase,即便因為major compaction物理刪除了數據,只要你開啟了備份功能,依然可以恢復。

end

技術分享圖片

如果,Google 早已解決不了你的問題。

如果,你還想知道 Apple、Facebook、IBM、阿裏等國內外名企的核心架構設計。

來,我們在深圳準備了知識星球,想助你成長:

技術分享圖片


文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/80837541

HBase從入門到精通系列:誤刪數據如何搶救?