误删Trafodion表的恢复
- 假设存在test_pope_delete表,并且表中存在两条记录(你可以通过如下的示例语句进行模拟)
示例:
create table test_pope_delete(id int, name varchar(32));
insert into test_pope_delete values(1, 'andy');
insert into test_pope_delete values(1, 'ruo');
- 假设test_pope_delete表被误操作删掉(你可以通过如下的示例语句进行模拟表被误删除)
示例:
drop table test_pope_delete;
- 恢复被误删除的表
实际在测试的过程中,删除一个trafodion表,在hdfs上/hbase/archive文件夹中,会立即发现删除表的所有region数据(不包含regioninfo、tabledesc等元数据文件),等待不到6分钟所有数据消失,说明所有数据生命周期结束,被删除。(注意:hbase.master.hfilecleaner.ttl控制/hbase/archive中数据的存活周期)。
因为删除表的清理周期是6分钟左右,那么如果发现表数据被误删除了,需要在6分钟内把/hbase/archive中对应的表的数据备份起来用于恢复。如果6分钟过后没有备份误删除的数据,那么数据将不能恢复。
恢复步骤如下:
备份被删除的数据到本地:
hdfs dfs -copyToLocal /hbase/archive/data/TRAF_RSRVD_3/TRAFODION.SEABASE.TEST_POPE_DELETE .
创建trafodion表:
create table test_pope_delete(id int, name varchar(32));
把备份的数据拷贝到新创建的表对应的目录(注意:6d0e1bf5c72afcf5b25873fd542e5f93 为region的名称,每个表的名称可能不同):
hdfs dfs -copyFromLocal 6d0e1bf5c72afcf5b25873fd542e5f93 /hbase/data/TRAF_RSRVD_3/TRAFODION.SEABASE.TEST_POPE_DELETE/
修改新拷贝数据文件权限:
hdfs dfs -chown -R hbase:hbase /hbase/data/TRAF_RSRVD_3/TRAFODION.SEABASE.TEST_POPE_DELETE/6d0e1bf5c72afcf5b25873fd542e5f93
修复元数据(注意:-repair内部的执行顺序可能不对,执行一遍失败,多执行几遍,成功。):
sudo -u hbase hbase hbck -repair
查询恢复后的数据(可以查询到误删之前的两条数据):
trafci
select * from test_pope_delete;
数据恢复成功。