gbase8a 少量数据误删除恢复
一.准备测试数据
表结构:
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 |
+------+-------+
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528