恢复delete误删除的数据
测试环境
4节点集群,2个安全组
[root@cmcc040 ~]# gcadmin
+-------+----------+--------------+--------+-
| rowid | nodename | IpAddress | sgname |
+-------+----------+--------------+--------+-
| 1 | n1 | 10.10.100.40 | sg01 |
+-------+----------+--------------+--------+-
| 2 | n2 | 10.10.100.41 | sg01 |
+-------+----------+--------------+--------+-
| 3 | n3 | 10.10.100.42 | sg02 |
+-------+----------+--------------+--------+-
| 4 | n4 | 10.10.100.43 | sg02 |
+-------+----------+--------------+--------+-
表结构:
create table t1 (c1 int, c2 varchar(10));
表内数据:
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
gbase> select * from t1 order by c1 limit 10;
+------+------+
| c1 | c2 |
+------+------+
| 1 | a1 |
| 2 | a2 |
| 3 | a3 |
| 4 | a4 |
| 5 | a5 |
| 6 | a6 |
| 7 | a7 |
| 8 | a8 |
| 9 | a9 |
| 10 | a10 |
+------+------+
测试过程
2.1 方法1,手工切换table.delete.A 、table.delete.B文件
误删除数据
gbase> delete from t1 where c1 > 997;
Query OK, 3 rows affected (Elapsed: 00:00:00.34)
确定删除了哪些节点的数据
在各节点node层执行以下SQL,注意表名要替换成各分片
select SCN
from information_schema.TABLES
where TABLE_SCHEMA='testdb'
and TABLE_NAME='t1_n1';
执行结果如下:
n1 : 844
n2 : 844
n3 : 844
n4 : 842
可以看出删除了n1,n2,n3节点的数据
在各节点切换table.delete文件
(1)n1节点:
cd /opt/gnode/userdata/gbase/testdb/metadata/t1_n1.GED
[gbase@cmcc040 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文件,注意做好备份。
[gbase@cmcc040 t1_n1.GED]$ rm -f table.delete.A
处理副本
cd /opt/gnode/userdata/gbase/testdb/metadata/t1_n2.GED/
[gbase@cmcc040 t1_n2.GED]$ ll table.delete.*
-rw-rw---- 1 gbase gbase 54 Jun 18 10:46 table.delete.A
[gbase@cmcc040 t1_n1.GED]$ rm -f table.delete.A
按以上操作处理n2,n3分片数据
注意在n3节点处理t1_n3.GED目录,在n4节点也处理t1_n3.GED目录。
将所有节点的集群重启
重启后检查数据
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
gbase> select * from t1 where c1 > 997;
+------+-------+
| c1 | c2 |
+------+-------+
| 1000 | a1000 |
| 998 | a998 |
| 999 | a999 |
+------+-------+
2.2 方法2,使用revert table命令
误删除数据
gbase> delete from t1 where c1=4;
Query OK, 1 row affected (Elapsed: 00:00:00.34)
gbase> select * from t1 where c1=4;
Empty set (Elapsed: 00:00:00.02)
2.确定删除了哪些节点的数据
与方法1该部分相同,查询结果如下:
n1 : 846
n2 : 844
n3 : 844
n4 : 847
可以看出刚才删除了n4节点的数据
使用revert table命令
分别进入n3,n4节点,在gnode层执行如下命令
gbase> revert table testdb.t1_n4 scn_number 847;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
检查数据
[gbase@cmcc040 ~]$ gccli -uroot testdb;
GBase client 8.5.1.2 build 40776. Copyright (c) 2004-2013, GBase. All Rights Reserved.
gbase> select * from t1 where c1=4;
+------+------+
| c1 | c2 |
+------+------+
| 4 | a4 |
+------+------+
1 row in set (Elapsed: 00:00:00.03)
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (Elapsed: 00:00:00.01)
评论
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528