GBase 8a
运维管理
文章

gbase8a 少量数据误删除恢复

发表于2024-03-08 11:23:36162次浏览2个评论

一.准备测试数据

表结构:
create table t1 (c1 int, c2 varchar(10));

表内数据:
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
|     100 |
+----------+

gbase> select * from t1 order by c1 limit 5;
+------+------+
| c1   | c2   |
+------+------+
|    1 | a1   |
|    2 | a2   |
|    3 | a3   |
|    4 | a4   |
|    5 | a5   |
+------+------+
gbase> select * from t1 where c1 > 97;
+------+-------+
| c1   | c2    |
+------+-------+
| 100 | a100 |
|  98 | a98  |
|  99 | a99  |
+------+-------+

二.测试过程                        

1.误删除数据
gbase> delete from t1 where c1 > 97;

2.确定删除了哪些节点的数据
在各节点node层执行以下SQL,注意表名要替换成各分片
select SCN 
 from information_schema.TABLES 
where TABLE_SCHEMA='testdb' 
  and TABLE_NAME='t1_n1';

执行结果如下:
n1 : 84
n2 : 84
n3 : 84
n4 : 82
可以看出删除了n1,n2,n3节点的数据

3.在各节点切换table.delete文件
(1)n1节点: 
cd /opt/gnode/userdata/gbase/testdb/metadata/t1_n1.GED
$ ll table.delete.*
-rw-rw---- 1 gbase gbase 54 Jun 18 10:46 table.delete.A

如果是首次删除,只有table.delete.A文件,将该文件删除即可。
如果之前曾经执行过删除操作,则会出现table.delete.A和table.delete.B文件,可手工切换这两个文件。

直接删除table.delete.A文件,注意做好备份。
$ rm -f table.delete.A

(2)处理副本
cd /opt/gnode/userdata/gbase/testdb/metadata/t1_n2.GED/
$ ll table.delete.*
-rw-rw---- 1 gbase gbase 54 Jun 18 10:46 table.delete.A

$ rm -f table.delete.A

(3)按以上操作处理n2,n3分片数据
注意在n3节点处理t1_n3.GED目录,在n4节点也处理t1_n3.GED目录。

(4)将所有节点的集群重启
重启后检查数据
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
|     100 |
+----------+

gbase> select * from t1 where c1 > 97;
+------+-------+
| c1   | c2    |
+------+-------+
| 100 | a100 |
|  98 | a98  |
|  99 | a99  |
+------+-------+

评论

登录后才可以发表评论
用户头像
levvel发表于 7个月前
读书破万卷,下笔如有神
茵陈发表于 2个月前
闪闪发光