北京做的比较好的网站公司吗,聚搜济南网站建设公司,施工合同模板,手把手教你实现电商网站开发摘要#xff1a; 前言 有时候我们操作数据库的时候不小心误删数据#xff0c;这时候如何找回#xff1f;mysql里有binlog可以帮助我们恢复数据#xff0c;但是没有开binlog也没有备份就尴尬了。如果是HBase#xff0c;你没有做备份误删了又如何恢复呢#xff1f; 数据保护…摘要 前言 有时候我们操作数据库的时候不小心误删数据这时候如何找回mysql里有binlog可以帮助我们恢复数据但是没有开binlog也没有备份就尴尬了。如果是HBase你没有做备份误删了又如何恢复呢 数据保护 当误删数据发生时候不管三七二十一第一要务是进入hbase shell执行如下.
前言有时候我们操作数据库的时候不小心误删数据这时候如何找回mysql里有binlog可以帮助我们恢复数据但是没有开binlog也没有备份就尴尬了。如果是HBase你没有做备份误删了又如何恢复呢数据保护当误删数据发生时候不管三七二十一第一要务是进入hbase shell执行如下命令alter t, { NAME f, KEEP_DELETED_CELLS TRUE }如果误删一张表的有多个family里的数据需要都执行一下alter tt, { NAME f1, KEEP_DELETED_CELLS TRUE }, { NAME f2, KEEP_DELETED_CELLS TRUE }设置 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.首先我们准备几行数据hbase(main):020:0 scan t
ROW COLUMNCELLx.row1 columnf:c1, timestamp1528449361490, valuevalue1x.row2 columnf:c2, timestamp1528449372090, valuevalue2x.row3 columnf:c3, timestamp1528449378971, valuevalue3y.row1 columnf:c1, timestamp1528449387923, valuevalue1y.row2 columnf:c2, timestamp1528449394742, valuevalue2
5 row(s)
Took 0.0304 seconds2.然后我们删掉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 seconds3.查一下现在只有3行了hbase(main):026:0 scan t
ROW COLUMNCELLx.row1 columnf:c1, timestamp1528449361490, valuevalue1x.row2 columnf:c2, timestamp1528449372090, valuevalue2x.row3 columnf:c3, timestamp1528449378971, valuevalue3
3 row(s)
Took 0.0079 seconds4.现在我们带上raw再次查找数据不仅能看到被删除数据还能看到删除标记。hbase(main):047:0 scan t, { TIMERANGE [0, 1528450107075], RAW true}
ROW COLUMNCELLx.row1 columnf:c1, timestamp1528449361490, valuevalue1x.row2 columnf:c2, timestamp1528449372090, valuevalue2x.row3 columnf:c3, timestamp1528449378971, valuevalue3y.row1 columnf:c1, timestamp1528449387923, typeDeletey.row1 columnf:c1, timestamp1528449387923, valuevalue1y.row2 columnf:c2, timestamp1528449394742, typeDeletey.row2 columnf:c2, timestamp1528449394742, valuevalue2
5 row(s)
Took 0.0091 seconds这里我设置了TIMERANGE 指定的是数据写入的时间。对于我这个case其实并没有什么用我只是想说明几点即便不设置RAW也可以通过时间搜索到被删数据。比如数据写入时间是Tdelete时间是T2那么查找[0, T1]的话就能看见数据。前提是设置了 KEEP_DELETED_CELLSTRUE如果你后续写入重复的Key那你必须指定好TIMERANGE不然你可能看到的不是原先删除的keyVlaue。delete操作默认的时间不是当前server的时间也不是构造Delete对象的时间而是被删除的这个keyValue的写入时间。当然这个得看版本测试时候发现1.x和2.x还是不一样的有点坑还以为高版本不能仅通过TIMERAGE搜素被删数据了。如果你的Delete mark的时间和数据的时间一样那只能通过RAW看到。数据恢复完建议关闭KEEP_DELETED_CELLS节省空间提高查询效率。其他上文使用的是hbase shell演示你可以使用任何语言的API完成上面的操作。如果你使用的是云HBase即便因为major compaction物理删除了数据只要你开启了备份功能依然可以恢复。原文链接本文为云栖社区原创内容未经允许不得转载。