大数跨境
0
0

OBD 删除备租户时,会导致误删除主租户?

OBD 删除备租户时,会导致误删除主租户? 爱可生开源社区
2025-11-24
1
导读:如果你在用 OBD,请注意这个版本!

作者:姚嵩,外星人,舍利小王子。

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

本文约 1200 字,预计阅读需要 5 分钟。


1. 背景

使用 OBD[1] 删除备租户时,实际会删除主租户保留备租户,和预期严重不符。

  • OBD 版本:3.6.0

约定

下述的所有集群名称,指的都是 obd 安装时,指定的 deploy_name

{xxx} 表示 xxx 是需要填写的变量 。

2. 环境准备

准备一组主备租户。

  • 功能:展示指定集群中指定租户的信息。
  • 语法obd cluster tenant show  {集群名} -t {租户名} -g
  • 参数-t 指定租户名,-g 表示展示主备拓扑图。
# obd cluster tenant show my_ob_master -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         tenant basic info                                                                         |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql   | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 2G          | 10000    | 10000    | 4G            | 2           | PRIMARY     |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
query primary-standby relation ok

primary-standby relation topology graph

my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql
  • 主租户所在 OB 集群my_ob_master:tnt_mysql
  • 备租户所在 OB 集群my_ob1:tnt_mysql

3. 测试过程

3.1 查看主备租户状态(从备租户上查看)

# obd cluster tenant show my_ob1 -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         tenant basic info                                                                         |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql   | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 2G          | 10000    | 10000    | 4G            | 2           | STANDBY     |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                   standby tenant standby info                                                                   |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
| standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp         | err_code | error_comment | switchover_status | switchover_epoch | log_mode     |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
| tnt_mysql           | NORMAL        | NORMAL      | 2025-11-16 22:30:14.391364 | 0        |               | NORMAL            | 0                | NOARCHIVELOG |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         standby tenant`s primary info                                                                         |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby_tenant_name | primary_tenant_info                                                                                                                                     |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| tnt_mysql           | IP_LIST=10.186.65.16:2881,USER=standbyro@tnt_mysql,PASSWORD=SRN2nfroeZ,TENANT_ID=1002,CLUSTER_ID=1762844529,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
query primary-standby relation ok

primary-standby relation topology graph

my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql

如结果所述,在备租户的 standby tenant standby info 信息中:

  • tenant_status 为 NORMAL 表示备租户状态正常;
  • sync_status 为 NORMAL 表示同步状态正常;
  • sync_scn_timestamp 显示的同步时间为当前时间,几乎无延迟;

3.2 查看主备租户状态(从主租户上查看)

# obd cluster tenant show my_ob_master -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         tenant basic info                                                                         |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql   | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 2G          | 10000    | 10000    | 4G            | 2           | PRIMARY     |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
query primary-standby relation ok

primary-standby relation topology graph

my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql

3.3 删除备租户

  • 功能:删除指定集群中的指定租户
  • 语法obd cluster tenant drop {集群名} -t {租户名}
  • 参数-t 指定待删除的租户名
# obd cluster tenant drop my_ob1 -t  tnt_mysql
Get local repositories ok
Open ssh connection ok
Connect to observer 10.186.65.22:2881 ok
Get deployment connections ok
Get standbys info ok
Drop tenant tnt_mysql ok
Trace ID: cc90eeba-c2f8-11f0-9a4c-02000aba4116
If you want to view detailed obd logs, please run: obd display-trace cc90eeba-c2f8-11f0-9a4c-02000aba4116

3.4 查看主备租户状态(从备租户上看)

# obd cluster tenant show my_ob1 -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         tenant basic info                                                                         |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql   | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 2G          | 10000    | 10000    | 4G            | 2           | STANDBY     |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                       standby tenant standby info                                                                                        |
+---------------------+---------------+------------------+----------------------------+----------+---------------------------------------------------+-------------------+------------------+--------------+
| standby_tenant_name | tenant_status | sync_status      | sync_scn_timestamp         | err_code | error_comment                                     | switchover_status | switchover_epoch | log_mode     |
+---------------------+---------------+------------------+----------------------------+----------+---------------------------------------------------+-------------------+------------------+--------------+
| tnt_mysql           | NORMAL        | SOURCE HAS A GAP | 2025-11-16 22:30:32.923425 | -4233    | There is a gap between the log source and standby | NORMAL            | 0                | NOARCHIVELOG |
+---------------------+---------------+------------------+----------------------------+----------+---------------------------------------------------+-------------------+------------------+--------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                         standby tenant`s primary info                                                                         |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby_tenant_name | primary_tenant_info                                                                                                                                     |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| tnt_mysql           | IP_LIST=10.186.65.16:2881,USER=standbyro@tnt_mysql,PASSWORD=SRN2nfroeZ,TENANT_ID=1002,CLUSTER_ID=1762844529,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
query primary-standby relation ok 

如结果所述,tenant basic info 信息中,备租户 tnt_mysql 的信息依然存在,表示备租户依然存在,并未被删除。

在备租户的 standby tenant standby info 信息中:

  • tenant_status 为 NORMAL 表示备租户状态正常;
  • sync_status 为 SOURCE HAS A GAP 表示主租户上缺失了备租户所需的日志;

3.5 查看主备租户状态(从主租户上看)

# obd cluster tenant show my_ob_master -t tnt_mysql -g
[ERROR] tnt_mysql not exists in my_ob_master

如结果所述,主租户被删除了。

4. 当前该如何安全的删除备租户?

4.1 为备租户解藕主备关系

主备关系解除后,备租户会成为一个独立的主租户

  • 功能:为备租户解藕主备关系,让备租户成为一个独立的主租户
  • 语法obd cluster tenant decouple {备租户所在集群名称}   {备租户名称}  -p {备租户的 root 用户密码}
  • 参数-p 指定待提升的备租户的 root 用户密码
# obd cluster tenant decouple my_ob1  tnt_mysql -p aaAA11__

4.2 为备租户解藕主备关系后,再删除原备租户

# obd cluster tenant drop my_ob1 -t  tnt_mysql

5. 补充情况

当主租户被意外删除,但还留存备租户的情况下,我们可以考虑 failover:

  • 功能:将备租户通过 failover 提升为主
  • 语法obd cluster tenant failover {备租户所在集群名称}  {备租户名称}  -p {备租户的root用户密码}
  • 参数-p 指定待提升的备租户的 root 用户密码
# obd cluster tenant failover my_ob1 tnt_mysql -p aaAA11

总结

  1. OBD 3.6.0 版本在指定删除备租户时,会删除主租户,保留备租户,不符合预期;
  2. 如果想删除备租户,保留主租户,可以先在备租户上解藕主备关系,再删除原备租户;
  3. 若意外删除了主租户,留存了备租户,可以先尝试找回主租户(例如回收站),若找不回主租户,可以尝试 failover,将原备租户提升为新的主租户,再按需补齐丢失的数据。
参考资料
[1] 

OceanBase 安装部署工具 OBD: https://www.oceanbase.com/docs/common-obd-cn-1000000003892223



本文关键字:#OceanBase #OBD





2000 倍性能提升!Semi Join 改写全过程分析
3.X vs 4.X:OceanBase 手动收集统计信息的天壤之别!
一个案例掌握 OMS 校验方式及适用场景
OBLogProxy 在 Binlog 模式下的故障案例解析



✨ Github:https://github.com/actiontech/sqle

📚 文档:https://actiontech.github.io/sqle-docs/

💻 官网:https://opensource.actionsky.com/sqle/

👥 微信群:请添加小助手加入 ActionOpenSource

🔗 商业支持:https://www.actionsky.com/sqle


【声明】内容源于网络
0
0
爱可生开源社区
爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。
内容 1953
粉丝 0
爱可生开源社区 爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。
总阅读2.4k
粉丝0
内容2.0k