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

2021-09-20 08:26:11 字數 2865 閱讀 8346

有時候我們運算元據庫的時候不小心誤刪資料,這時候如何找回?mysql裡有binlog可以幫助我們恢復資料,但是沒有開binlog也沒有備份就尷尬了。如果是hbase,你沒有做備份誤刪了又如何恢復呢?

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

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

alter 'tt', ,
設定 keep_deleted_cells 為 true 的目的在於防止資料被物理刪除。這裡有必要解釋一下hbase清理資料的原理:

keep_deleted_cells 的作用就是在major compaction發生的時候,決定要不要清理舊資料。這裡需要注意一點,即便 keep_deleted_cells 設定為true,資料仍然會因為過期而被清理(hbsae表中的ttl屬性)。這個設定無可厚非,既然過期了,誤刪不誤刪也無所謂了。

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

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

hbase(main):020:0> scan 't'

row column+cell

x.row1 column=f:c1, timestamp=1528449361490, value=value1

x.row2 column=f:c2, timestamp=1528449372090, value=value2

x.row3 column=f:c3, timestamp=1528449378971, value=value3

y.row1 column=f:c1, timestamp=1528449387923, value=value1

y.row2 column=f:c2, timestamp=1528449394742, value=value2

5 row(s)

took 0.0304 seconds

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

hbase(main):024:0> delete 't', 'y.row1', 'f:c1'

took 0.0212 seconds

hbase(main):025:0> delete 't', 'y.row2', 'f:c2'

took 0.0043 seconds

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

hbase(main):026:0> scan 't'

row column+cell

x.row1 column=f:c1, timestamp=1528449361490, value=value1

x.row2 column=f:c2, timestamp=1528449372090, value=value2

x.row3 column=f:c3, timestamp=1528449378971, value=value3

3 row(s)

took 0.0079 seconds

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

hbase(main):047:0> scan 't', 

row column+cell

x.row1 column=f:c1, timestamp=1528449361490, value=value1

x.row2 column=f:c2, timestamp=1528449372090, value=value2

x.row3 column=f:c3, timestamp=1528449378971, value=value3

y.row1 column=f:c1, timestamp=1528449387923, type=delete

y.row1 column=f:c1, timestamp=1528449387923, value=value1

y.row2 column=f:c2, timestamp=1528449394742, type=delete

y.row2 column=f:c2, timestamp=1528449394742, value=value2

5 row(s)

took 0.0091 seconds

這裡我設定了timerange, 指定的是資料寫入的時間。對於我這個case其實並沒有什麼用,我只是想說明幾點:

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

ZED Board從入門到精通系列 插曲

去年暑假期間寫了一部分zedboard教程,由於開學,忙著找工作,一直擱置。寒假期間準備再跟進一部分系列教程。另外有幾點需要說明的是,zynq發展很快,一年之內工具可能會發生較大變化,所以不能指望我的部落格內容總是與最新的工具同步,需要開發者自己協調權衡,是採用最新的工具,還是跟著部落格內容進行學習...

ARKit從入門到精通系列教程(目錄)

arkit從入門到精通 1 arkit初體驗 arkit從入門到精通 2 arkit工作原理及流程介紹 寫在前面的話1.2 arkit與scenekit的關係1.3 arkit工作原理 1.3.1 arscnview與arsession1.3.2 arworldtrackingsessionconf...

Linux從入門到精通系列之DHCP

linux從入門到精通系列之dhcp 首先呢先講下dhcp的簡介 對於那些不太了解網路技術的人來說,配置tcp ip可能是一件非常複雜的工作,對那些將pc連線到區域網的使用者來說只能將配置集中到伺服器端,這樣可以簡化使用者端的工作複雜度。當然,這將在一定程度上,增加管理員的工作量,但是從整體考慮,這...