技术分享 | OceanBase 租户延迟删除

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


OceanBase 关于租户的删除设计了以下三种方式:
  1. 正常删除: 租户里的各种对象也被删除,具体表现形式依赖sys租户回收站功能是否开启。
  2. 延迟删除: 保留一段时间的租户数据,等时间到期后,再删除租户。
  3. 立即删除: 彻底丢弃租户!

对于第二种方式,之前同事们有内部讨论过OceanBase的设计初衷;有可能是以防租户被误删、或者是给费用到期并且不续租的租户一段缓冲的时间,让他能在数据保留时间到期前备份需要的数据出来。

租户的删除语法为:
DROP TENANT [IF EXISTS] tenant_name [PURGE|FORCE];
DROP TENANT:依赖sys租户回收站是否开启,有两种表现形式:
  1. 回收站开启,删除的租户会进入回收站,后续可以通过回收站还原此租户!
  2. 回收站关闭,此操作租户被删除,但是可以让租户数据保留一段时间(由配置参数schema_history_expire_time 来设定)。在此期间租户仍然可以进行DML操作,保证遗留业务的正常运行。OceanBase 会有一个后台垃圾清理线程在这个保留时间到期后彻底删除租户。
DROP TENANT PURGE:此操作仅延迟删除租户,且具体表现形式和回收站是否开启无关。也即无论回收站开启与否,删除的租户都不会进入回收站,而是到期后,由后台垃圾清理线程删除租户。
DROP TENANT FORCE: 此操作立刻删除租户!

接下来,我们来简单演示下租户这些操作。

先来创建两个新租户tenant1、tenant2。

mysql:5.6.25:oceanbase>create resource unit mini1 max_cpu 1,max_memory '1G',max_disk_size '1G',max_session_num 1200,max_iops 1000;
Query OK, 0 rows affected (0.015 sec)

<mysql:5.6.25:oceanbase>create resource pool p3 unit 'mini1',unit_num=1;
Query OK, 0 rows affected (0.038 sec)

<mysql:5.6.25:oceanbase>create resource pool p4 unit 'mini1',unit_num=1;
Query OK, 0 rows affected (0.062 sec)

<mysql:5.6.25:oceanbase>create tenant tenant1 resource_pool_list=('p3');
Query OK, 0 rows affected (2.660 sec)

<mysql:5.6.25:oceanbase>create tenant tenant2 resource_pool_list=('p4');

回收站开启,删除租户tenant1: 查询系统表__all_tenant,租户tenant1已经被删除,但是租户数据存放在sys租户回收站里,可以随时被恢复。

mysql:5.6.25:oceanbase>set recyclebin=on;
Query OK, 0 rows affected (0.000 sec)

<mysql:5.6.25:oceanbase>drop tenant tenant1;
Query OK, 0 rows affected (0.040 sec)

<mysql:5.6.25:oceanbase>show recyclebin;
+--------------------------------+---------------+--------+----------------------------+
| OBJECT_NAME                    | ORIGINAL_NAME | TYPE   | CREATETIME                 |
+--------------------------------+---------------+--------+----------------------------+
| __recycle_$_1_1678073859469312 | tenant1       | TENANT | 2023-03-06 12:07:21.626602 |
+--------------------------------+---------------+--------+----------------------------+
1 row in set (0.012 sec)

<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
Empty set (0.001 sec)

从回收站恢复租户tenant1: 再次查询系统表__all_tenant ,租户tenant1恢复正常。

mysql:5.6.25:oceanbase>flashback tenant tenant1 to before drop;
Query OK, 0 rows affected (0.044 sec)

<mysql:5.6.25:oceanbase>show recyclebin;
Empty set (0.003 sec)

<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
+-------------+
| tenant_name |
+-------------+
| tenant1     |
+-------------+
1 row in set (0.002 sec)

回收站关闭,删除租户tenant1:删除后,依然可以通过系统表__all_tenant查询到租户信息。

mysql:5.6.25:oceanbase>set recyclebin=off;
Query OK, 0 rows affected (0.001 sec)

<mysql:5.6.25:oceanbase>drop tenant tenant1;
Query OK, 0 rows affected (0.041 sec)

<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant1';
+-------------+
| tenant_name |
+-------------+
| tenant1     |
+-------------+
1 row in set (0.001 sec)

直到配置项schema_history_expire_time设定的保留时间到期前,租户tenant1 都可以对其内部对象正常操作:比如DQL、DML语句等。

[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -D ytt -e "select * from t1;"
+----+
| id |
+----+
|  1 |
|  2 |
+----+

[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -Dytt -e "insert into t1 values (10)"

但是无法执行DDL语句新建表:创建表t2会报错!

[root@ytt-pc obytt111]# obclient -uroot@tenant1#ob-ytt -P 2883 -cA -h 127.1 -Dytt -e "create table t2 like t1;"
ERROR 4179 (HY000) at line 1: ddl operation during dropping tenant not allowed

DROP TENANT tenant2 PURGE:延迟删除租户,等保留时间到期后,彻底将租户删除,和上面例子类似。

<mysql:5.6.25:oceanbase>drop tenant tenant2 purge;
Query OK, 0 rows affected (0.055 sec)

<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name ='tenant2';
+-------------+
| tenant_name |
+-------------+
| tenant2     |
+-------------+
1 row in set (0.002 sec)

执行DROP TENANT tenant2 FORCE: 后续不再需要租户tenant2,可以立即删除。

mysql:5.6.25:oceanbase>drop tenant tenant2 force;
Query OK, 0 rows affected (0.050 sec)

<mysql:5.6.25:oceanbase>select tenant_name from __all_tenant where tenant_name = 'tenant2';
Empty set (0.002 sec)

中国领先的企业数据处理技术整体解决方案提供商,开源数据库领域优秀企业。为大型行业用户的特定场景提...

371 声望
181 粉丝
0 条评论
推荐阅读
故障分析 | 一个因 SSL 配置导致的复制异常报错
在构建 MySQL 复制过程中,IO 线程始终连接不上主库,反复确认复制账号的权限、账号密码都没问题,最终定位为 SSL 配置的问题。作者:木板。某全国性股份制银行 DBA。擅长 DB2,MySQL 和 Oracle 数据库的运行维护...

爱可生云数据库阅读 187

华东师范大学副校长周傲英:未来,中国需要什么样的数据库?
本文为华东师范大学副校长,CCF 会士周傲英教授在第一届 OceanBase 开发者大会带来的分享。欢迎访问 OceanBase 官网获取更多信息:[链接]

OceanBase技术站阅读 1k

封面图
四川农信:与先进科技融合,更好服务广大用户|客户之声
1951 年 12 月 25 日,四川省农村信用社联合社(以下简称“四川农信”)诞生于泸州黄舣乡。经几代四川农信人接续奋斗,七十余年栉风沐雨,四川农信已经成长为全省业务规模最大、服务网络最广、员工数量最多、历史底...

OceanBase技术站阅读 713

封面图
ODC,是另一个 Navicat 吗?
OceanBase Developer Center 项目组核心成员,负责 ODC 开发者工具的整体研发工作。曾做过 TSDB 存储引擎、SaaS 安全软件,对数据库协同、研发效率、数据安全、云原生架构等有浓厚兴趣。

OceanBase技术站阅读 665

封面图
掌玩科技×OceanBase:HTAP实时数据分析,降低80%存储成本
近日,新兴游戏公司海南掌玩网络科技有限公司(以下简称“掌玩科技”)正式牵手原生分布式数据库 OceanBase,其投放系统、用户分析系统、数据系统、运营分析系统等数套系统均接入了 OceanBase。 通过 OceanBase 的 ...

OceanBase技术站阅读 627

封面图
陈小伟:从ChatGPT谈起,预测5个数据库开发趋势
3 月 25 日,第一届 OceanBase 开发者大会在北京举行,OceanBase 生态产品技术专家陈小伟为大家带来了 《数据库协同开发的现状和发展趋势》 的分享,从热门的 ChatGPT 谈到数据库的协同开发,与大家一起洞悉行业...

OceanBase技术站阅读 585

封面图
OceanBase入选啦!金融信创优秀解决方案(第二期)
近日,金融信创生态实验室在京举办金融信创解决方案研讨会,正式发布第二期金融信创优秀解决方案,OceanBase 基于数据库的金融核心业务解决方案成功入选该名单。

OceanBase技术站阅读 520

封面图

中国领先的企业数据处理技术整体解决方案提供商,开源数据库领域优秀企业。为大型行业用户的特定场景提...

371 声望
181 粉丝
宣传栏