ClickHouse UNDROP TABLE 功能

不论是使用 ClickHouse 还是其他数据库,如果手抖删掉了一个表,想要恢复是相当困难。但是现在 ClickHouse 支持了 UNDROP TABLE 能力,如果因为手抖误删了一个表,那在短时间内可以快速恢复。

目前 UNDROP TABLE 还是个实验性功能,如果想要体验可以使用最新 v23.3.1.2823-lts 分支。下面来体验一下整个功能。

创建测试表

目前只支持 Atomic 库引擎下的部分表引擎执行 UNDROP TABLEMergeTreeReplicatedMergeTreeDistributedLog 等都是支持的,但是临时表是不支持使用 UNDROP TABLE 进行恢复的。这里可以在默认的 default 库引擎下创建一个 MergeTree 表引擎进行体验。建表语句如下:

create table test (id Int32) engine=MergeTree() order by id;

建表完毕后,写入一些测试数据,方便后续验证恢复后表是否正常,可以随意写几条:

insert into test values (1),(2),(3),(4),(5);

验证数据写入成功:

select * from test;

┌─id─┐
│  1 │
│  2 │
│  3 │
│  4 │
│  5 │
└────┘

删除表

建表及写入数据完成后,执行删除表操作:

drop table test;

此时验证表被删除:

select * from test;

Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test doesn't exist. (UNKNOWN_TABLE)

此时,再查询该表会提示表不存在,证明删除成功。

新版本提供了 system.dropped_tables 系统表来查看被删除的表:

select * from system.dropped_tables\G

Row 1:
──────
index:                 0
database:              default
table:                 test
uuid:                  87b7d1d6-f86d-485e-a254-79d9c58c7464
engine:                MergeTree
metadata_dropped_path: /data/ClickHouse/build/programs/data/metadata_dropped/default.test.87b7d1d6-f86d-485e-a254-79d9c58c7464.sql
table_dropped_time:    2023-04-02 12:30:13

这个系统表是记录了已被删除,但是还未被清理数据的表,即表示可以被恢复的表。

恢复表

ClickHouse 在默认配置下,被删除的表在 8min 后才会开始清除任务,所以如果是手抖误删,就可以使用 UNDROP TABLE 进行恢复。

使用方法

1. UNDROP TABLE {test}

这种方式会找到最近被删除的 default.test 表,因为 ClickHouse 可以不断的创建删除同一个名字的表。

2. UNDROP TABLE {test} UUID {uuid}

如果不想恢复最近一次被删除的表,可以通过指定表 uuid 的方式来恢复,具体的 uuid 可以在 system.dropped_tables 系统表中查询到。

3. UNDROP TABLE {test} ON CLUSTER {cluster}

如果在删除表时使用的是 ON CLUSTER 语句,也不要紧,UNDROP TABLE 也支持 ON CLUSTER

恢复测试

目前 UNDROP TABLE 还是实验性功能,所以要把 allow_experimental_undrop_table_query 打开:

undrop table test settings allow_experimental_undrop_table_query=1

再查询验证一下,test 表已经被正常恢复了。

当 test 表被恢复后,还可以再次将 test 表删除,可以再使用指定 uuid 的方式来恢复:

undrop table test uuid '87b7d1d6-f86d-485e-a254-79d9c58c7464' settings allow_experimental_undrop_table_query=1

注意,这里的 uuid 是我系统表中查询到的,需要替换成自己真实 uuid 才可以。

如果表删除后超过了默认的 8min,就不能再恢复了,会有一下报错提示:

undrop table test settings allow_experimental_undrop_table_query=1

Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: The drop task of table default.test is in progress, has been dropped or the database engine doesn't support it. (UNKNOWN_TABLE)

到此,UNDROP TABLE 就介绍完毕了,有兴趣体验一下吧。


欢迎添加微信:xiedeyantu,讨论技术问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只努力的微服务

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值