首批通过分布式安全可靠测评,为关键业务系统打造
创建租户
更新时间:2026-05-28 09:44:58
OceanBase 数据库是原生分布式数据库,在同一个数据库中可以同时运行多个数据库实例,第一步往往需要创建一个租户(数据库实例),然后像使用传统单机数据库那样使用数据库实例。本文介绍如何创建租户。
创建租户的流程
OceanBase 数据库仅支持创建用户租户,系统租户由集群创建时自动创建。创建用户租户是一系列操作的组合,首先创建资源规格,然后基于该资源规格创建资源池,最后创建租户并指定其资源池。所以创建租户的顺序为:资源规格 -> 资源池 -> 租户。
创建资源规格:创建资源规格仅仅是规格定义,不实际分配资源,可以通过
DBA_OB_UNIT_CONFIGS视图查看所有资源规格。资源规格可以复用,可以建议根据业务场景抽象若干不同规格,例如小规格、中规格、大规格等,从而降低运维复杂度。但当多个租户共用同一资源规格且某个租户资源不足需要应急扩容时,不能直接调整原规格,需要新建独立的资源规格并切换,或者直接更换更大一级的资源规格。创建资源池:创建资源池时会实际创建 Unit,按照规格定义分配资源,如对应节点预留资源不够将会创建失败,通过
GV$OB_SERVERS视图可以查看所有节点资源分配信息。如果创建成功可以通过DBA_OB_RESOURCE_POOLS视图和DBA_OB_UNITS视图查看资源池及其对应 Unit。资源池不能复用,成功创建租户后指定资源池将会分配给租户。创建租户:创建租户时通过指定
RESOURCE_POOL_LIST将资源池分配给租户,可以通过DBA_OB_TENANTS视图查看所有租户。可以每个 Zone 一个资源池,使用独立的资源规格。也可以所有 Zone 使用同一个资源池,从而所有 Zone 使用同一个资源规格。除了资源池列表,还有兼容模式、Primary Zone、Locality、连接白名单等其他重要属性和系统变量,其中资源池列表为创建租户时的必填项。新建租户 Root 用户密码为空,使用前请先设置密码。
资源规划
创建租户前需要做好资源规划,创建租户后再调整可能会非常麻烦。做好资源规划的前提是深入理解业务场景,从而更多的参与到业务数据库架构设计中去。
资源规划有如下注意事项:
每个节点需要预留一定的资源,备用于租户容量不足需要紧急扩容的情况。
对于大量写入的业务,需要设置较大的内存和日志盘规格。对于大量消耗 CPU 资源的业务,需要错落分布于不同节点,以避免节点负载不均衡,甚至造成热点节点并影响业务。
集群配置项
resource_hard_limit定义了 CPU 资源的超卖百分比,又被称为“超卖配置项”,OceanBase 数据库仅支持 CPU 超卖,不支持其他资源的超卖。CPU 超卖适用于同一集群中不同租户间峰值错峰的场景,从而提高整体资源使用率。如果租户间峰值同时出现,开启 CPU 超卖可能导致租户之间 CPU 资源的互相抢占,互相影响。Unit 的资源规格不能超过单节点的总可分配资源,对于单 Unit 租户(资源池的
UNIT_NUM=1)如果出现容量瓶颈,除了更换更大规格的服务器,还可以将租户水平扩展为多 Unit,从而利用多节点的资源。多 Unit 租户需要认真设计业务数据在 Unit 间的分布,以避免分布式事务对性能的损耗。如果预计业务量会突破单机容量上限,需要提前做好数据分片的设计,数据分片需要尽量避免分布式事务。从传统数据库迁移到 OceanBase 数据库的业务,为了迁移的平滑性往往采用对等架构,即采用单 Unit 租户的设计方案,以保证业务访问数据库时依然仅需要访问单节点。当随着业务量增加达到单机容量上限后,可以扩展为多 Unit 租户,按照业务场景将业务数据拆分为多组。每组业务数据放置于一个 Unit 内,保证每个业务的数据库访问不跨机,从而在零性能损耗的情况下实现水平扩容。这也是 OceanBase 数据库相比于传统数据库的架构优势之一,易用的水平扩展性,可以轻松突破单机容量上限。
注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,您需要指定租户的类型。租户创建后,租户类型无法修改,因此创建租户前请规划好您的租户类型。
步骤一:创建资源规格
资源规格是对 CPU、内存、磁盘空间、IOPS 等资源项进行的定义。
说明
基于 OceanBase 数据库 3.x 版本的大量实践经验,OceanBase 数据库 V4.0 的资源管理功能有很大改进:
- 支持 Unit 级别管理 CPU、内存、日志盘空间、IOPS 等资源项,不支持 Unit 级别管理数据盘空间和 Session 个数等资源项。为了兼容 3.x 版本的运维工具和测试用例,
CREATE RESOURCE UNIT语句依然可以指定MAX_DISK_SIZE和MAX_SESSION_NUM,但是不会生效,也不会报错。 - 支持 CPU 超卖,通过超卖配置项
resource_hard_limit控制。GV$OB_SERVERS视图中的CPU_CAPACITY和CPU_CAPACITY_MAX字段分别表示节点 CPU 总容量和节点 CPU 总容量的超卖值,且CPU_CAPACITY_MAX = CPU_CAPACITY * resource_hard_limit。 - 不再支持内存超卖,引入内存超卖可能会导致租户工作不稳定。
- 支持租户间日志盘空间隔离,系统为每个租户预留日志盘空间,避免 V3.x 版本某个租户大量写入导致日志盘写爆从而影响其他租户的问题。
- 支持租户间 IOPS 隔离,引入三个 IOPS 规格参数:
MIN_IOPS、MAX_IOPS、IOPS_WEIGHT,IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。如果一个节点上所有 Unit 的MIN_IOPS之和超过了磁盘 IOPS 上限,则会根据IOPS_WEIGHT权重来分配 IOPS 资源。 - Meta 租户没有独立的 Unit,系统创建租户时默认为 Meta 租户预留资源,各项资源从用户租户资源中扣除。Meta 各项资源采用默认配置,不支持用户指定。
- 创建资源规格时 CPU 规格 和内存规格是必选项,其他参数可以自动计算,其中日志盘空间按照内存规格自动计算,IOPS 规格按照 CPU 规格自动计算。
操作步骤
使用
root用户登录到集群的sys租户。obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A进入
oceanbase数据库。obclient(root@sys)[(none)]> USE oceanbase;通过
DBA_OB_UNIT_CONFIGS视图,获取已有的资源规格信息。obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;返回结果如下:
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | DATA_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | MAX_NET_BANDWIDTH | NET_BANDWIDTH_WEIGHT | +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ | 1 | sys_unit_config | 2025-05-16 11:30:47.000298 | 2025-05-16 11:30:47.000298 | 4 | 4 | 5368709120 | 17448304640 | NULL | 9223372036854775807 | 9223372036854775807 | 4 | 9223372036854775807 | 4 | | 1001 | unit001 | 2025-05-16 11:31:08.531754 | 2025-05-16 11:31:08.531754 | 2 | 2 | 6442450944 | 19327352832 | NULL | 9223372036854775807 | 9223372036854775807 | 2 | 9223372036854775807 | 2 | +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ 2 rows in setDBA_OB_UNIT_CONFIGS视图的详细说明,参见 DBA_OB_UNIT_CONFIGS。通过
CREATE RESOURCE UNIT语句,创建资源规格。语法如下:
CREATE RESOURCE UNIT unit_name MEMORY_SIZE [=] 'size_value', MAX_CPU [=] cpu_num, [MAX_IOPS [=] iops_num,] [MIN_CPU [=] cpu_num,] [MIN_IOPS [=] iops_num,] [IOPS_WEIGHT [=]iopsweight,] [MAX_NET_BANDWIDTH [=] bandwidth_num,] [NET_BANDWIDTH_WEIGHT [=] bandwidth_weight_num,] [LOG_DISK_SIZE [=] 'size_value'];参数说明:
创建资源规格时,MAX_CPU 和 MEMORY_SIZE 必选。
unit_name:资源规格名称。MEMORY_SIZE:内存规格,其最小值由隐藏配置项__min_full_resource_pool_memory控制,默认为 5G,支持最小可以调整为 4G。OceanBase 数据库 V4.0 开始不支持内存超卖。MAX_CPU:CPU 规格上限,MIN_CPU是 CPU 规格下限,单位是核数。如果用户没有指定MIN_CPU,默认等于MAX_CPU值。MIN_CPU:最小的 CPU 规格,所有租户的MIN_CPU的总和不能超过该节点 CPU 总容量CPU_CAPACITY。MAX_IOPS和MIN_IOPS: 指定当前 Unit 可使用的 IOPS 资源的上限和下限,最小值均为 1024,并且要求MAX_IOPS >= MIN_IOPS。由于
MAX_IOPS和MIN_IOPS设置后,OceanBase 数据库内部会统一按照 16 KB 读的 IOPS 值作为有效值进行处理,建议将MAX_IOPS和MIN_IOPS的值设置为当前磁盘计算出来的 16 KB 读对应的 IOPS 值,以便后续进行租户内的资源隔离。有关 IOPS 基准值的计算,请参见 磁盘性能校准;有关租户内资源隔离的详细介绍及操作,请参见 资源隔离概述。如果 IOPS 相关参数未指定,其内部取值规则如下:
如果
MIN_IOPS和MAX_IOPS均未指定,则系统根据IOPS_WEIGHT自动分配 IOPS 资源,此时:MIN_IOPS和MAX_IOPS的值均为INT64_MAX。如果未指定
IOPS_WEIGHT的值,则IOPS_WEIGHT = MIN_CPU。如果指定了
IOPS_WEIGHT的值,则以指定的值为准。
如果仅指定了
MAX_IOPS的值,则MIN_IOPS的值取MAX_IOPS的值;同样,如果仅指定了MIN_IOPS的值,则MAX_IOPS的值取MIN_IOPS的值。此时:- 如果
IOPS_WEIGHT的值未指定,则默认为0。
- 如果
MAX_NET_BANDWIDTH:指定租户每个 Unit 可使用的网络带宽上限,最小值为 1 M。如果不指定,则默认值为INT64_MAX。NET_BANDWIDTH_WEIGHT:指定租户 Unit 的网络带宽权重,用于计算每台 OBServer 的带宽分给每个租户的比例。最小值为 0。如果不指定,则系统将按照以下规则自动计算NET_BANDWIDTH_WEIGHT的值:如果
MAX_NET_BANDWIDTH已指定,则NET_BANDWIDTH_WEIGHT的值为 0。如果
MAX_NET_BANDWIDTH未指定,则NET_BANDWIDTH_WEIGHT = MIN_CPU。
LOG_DISK_SIZE:日志盘空间,OceanBase 数据库 V4.0 会按租户管理日志盘空间,系统为各个租户预留日志盘空间,实现按租户隔离。当用户没有指定时,LOG_DISK_SIZE默认值是内存规格的 3 倍大小,最小为 2G。OceanBase 数据库 V4.0 支持租户间 IOPS 隔离,通过
MAX_IOPS、MIN_IOPS、IOPS_WEIGHT三个参数决定。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。在为参数指定值时,可以采用纯数字不带引号的方式,也可以使用带单位加引号或不带单位加引号的方式(例如:
'1T'、'1G'、'1M'、'1K')。其中:
对于
MAX_CPU、MIN_CPU、MAX_IOPS、MIN_IOPS、IOPS_WEIGHT、NET_BANDWIDTH_WEIGHT这些整型参数,如果参数值使用带单位加引号的方式,其单位含义为个,即 '1K' = 1000,'1M' = 1000000。例如:MAX_IOPS='2K'等效于MAX_IOPS=2000。如果使用不带单位加引号的方式,则含义与不加引号一致,即 '100' = 100,'1000' = 1000。
对于
MEMORY_SIZE、MAX_NET_BANDWIDTH、LOG_DISK_SIZE这些容量参数,如果使用带单位加引号的方式,与纯数字不带引号一样,其单位含义为字节,即 '1K' = 1024,'1M' = 1024 * 1024。如果使用不带单位加引号的方式,则引号中数值的默认单位为 MB。即 '100' = '100M' = 100 * 1024 * 1024。
CREATE RESOURCE UNIT语句的详细说明,参见 CREATE RESOURCE UNIT。示例:
创建一个名称为
S1_unit_config的资源规格,其资源配置为 CPU 为 1 核,内存 5G,日志盘空间 6G。obclient(root@sys)[oceanbase]> CREATE RESOURCE UNIT S1_unit_config MEMORY_SIZE = '5G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '6G', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;查询
DBA_OB_UNIT_CONFIGS视图,确认资源规格创建成功。obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config';返回结果如下:
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | DATA_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | MAX_NET_BANDWIDTH | NET_BANDWIDTH_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ | 1002 | S1_unit_config | 2025-05-28 10:20:38.299456 | 2025-05-28 10:20:38.299456 | 1 | 1 | 5368709120 | 6442450944 | NULL | 10000 | 10000 | 1 | 9223372036854775807 | 1 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ 1 row in set
步骤二:创建资源池
创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。
前提条件
- 确认集群是否有足够的可用资源来创建资源池。详细操作,参见 查看租户和资源信息。
- 创建资源池时需要指定其资源规格。在执行创建资源池操作前,请确认是否有可用的资源规格。有关创建资源规格的详细操作,参见 创建资源规格。
操作步骤
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A进入
oceanbase数据库。obclient(root@sys)[(none)]> USE oceanbase;通过
DBA_OB_RESOURCE_POOLS视图,获取资源池的配置信息。obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;返回结果如下:
+------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | 1 | sys_pool | 1 | 2025-05-16 11:30:47.004523 | 2025-05-16 11:30:47.011196 | 1 | 1 | zone1 | FULL | | 1001 | pool001 | 1002 | 2025-05-16 11:31:11.735042 | 2025-05-16 11:31:19.924596 | 1 | 1001 | zone1 | FULL | | 1002 | pool002 | 1004 | 2025-05-16 11:31:15.142237 | 2025-05-16 11:32:01.555002 | 1 | 1001 | zone1 | FULL | +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ 3 rows in setDBA_OB_RESOURCE_POOLS视图的详细说明,参见 DBA_OB_RESOURCE_POOLS。通过
CREATE RESOURCE POOL语句,创建资源池。语法如下:
CREATE RESOURCE POOL poolname UNIT [=] unitname, UNIT_NUM [=] unitnum, ZONE_LIST [=] ('zone' [, 'zone' ...]);参数说明:
UNIT:该资源池的资源规格。UNIT_NUM:该资源池在目标 Zone 的 Unit 个数,它的值要小于目标 Zone 的节点个数,且每个节点上最多只能分布同一个租户的一个 Unit。ZONE_LIST:资源池的 Zone 分布。OceanBase 数据库会在ZONE_LIST描述的每个 Zone 里面创建UNIT_NUM个 Unit,每个 Unit 的资源规格为UNIT参数设置的值。
CREATE RESOURCE POOL语句的详细说明,参见 CREATE RESOURCE POOL。示例:
创建一个名为
mq_pool_01的资源池,在 zone1、zone 2 各创建 1 个 Unit,且 Unit 的资源规格为S1_unit_config。obclient(root@sys)[oceanbase]> CREATE RESOURCE POOL mq_pool_01 UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2');创建一个名为
mq_pool_02的资源池,在 zone3 里创建 2 个 Unit,每个 Unit 的资源规格为S1_unit_config。obclient [oceanbase]> CREATE RESOURCE POOL mq_pool_02 UNIT='S1_unit_config', UNIT_NUM=2, ZONE_LIST=('zone3');
查询
DBA_OB_RESOURCE_POOLS视图,确认资源池创建成功。确认资源池
mq_pool_01是否创建成功:obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';返回结果如下:
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ | 1003 | mq_pool_01 | NULL | 2026-01-10 22:37:08.212366 | 2026-01-10 22:37:08.212366 | 1 | 1002 | zone1;zone2 | FULL | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ 1 row in set确认资源池
mq_pool_02是否创建成功:obclient(root@sys)[oceanbase]> SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_02';返回结果如下:
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | 1004 | mq_pool_02 | NULL | 2026-01-10 21:53:58.258888 | 2026-01-10 22:10:36.404338 | 2 | 1002 | zone3 | FULL | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ 1 row in set
步骤三:创建租户
资源池创建后,您可以根据业务需要,将资源池分配给租户。
前提条件
确保已有可用的资源池。有关创建资源池和资源单元的详细操作,参见 创建资源池。
注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,您需要指定租户的类型。租户创建后,租户类型无法修改,因此创建租户前请规划好您的租户类型。
操作步骤
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A进入
oceanbase数据库。obclient(root@sys)[(none)]> USE oceanbase;通过
DBA_OB_TENANTS视图,查看所有的租户信息。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, CREATE_TIME, MODIFY_TIME, PRIMARY_ZONE, LOCALITY, COMPATIBILITY_MODE, STATUS, TENANT_ROLE FROM oceanbase.DBA_OB_TENANTS;返回结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | COMPATIBILITY_MODE | STATUS | TENANT_ROLE | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ | 1 | sys | SYS | 2026-01-07 15:06:23.115389 | 2026-01-07 15:06:23.115389 | RANDOM | FULL{1}@zone1 | MYSQL | NORMAL | PRIMARY | | 1001 | META$1002 | META | 2026-01-07 15:07:29.169646 | 2026-01-07 15:07:35.175576 | zone1 | FULL{1}@zone1 | MYSQL | NORMAL | PRIMARY | | 1002 | mysql001 | USER | 2026-01-07 15:07:29.173619 | 2026-01-07 15:07:35.213500 | zone1 | FULL{1}@zone1 | MYSQL | NORMAL | PRIMARY | | 1003 | META$1004 | META | 2026-01-07 15:07:39.123961 | 2026-01-07 15:07:45.464339 | zone1 | FULL{1}@zone1 | MYSQL | NORMAL | PRIMARY | | 1004 | oracle001 | USER | 2026-01-07 15:07:39.123961 | 2026-01-07 15:07:45.487566 | zone1 | FULL{1}@zone1 | ORACLE | NORMAL | PRIMARY | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ 5 rows in setDBA_OB_TENANTS视图的详细说明,请参见 DBA_OB_TENANTS。(可选)当前版本支持异构 Zone 部署的租户,由于创建租户的语句中,不支持通过配置项
zone_deploy_mode来指定异构 Zone 模式(hetero),如果用户希望直接创建一个异构部署(异构 Zone 模式)的租户,可以通过以下方式,修改配置项模板。obclient(root@sys)[oceanbase]> ALTER SYSTEM SET zone_deploy_mode = 'hetero' tenant = 'seed';说明
除了修改配置项模板,也可以先创建同构 Zone 部署的租户后,再修改租户级配置项
zone_deploy_mode的值为hetero(异构 Zone 模式)。命令执行成功后,后续新建的所有租户均允许异构部署。
通过
CREATE TENANT语句,创建租户。语法如下:
CREATE TENANT [IF NOT EXISTS] tenant_name PRIMARY_ZONE [=] zone, RESOURCE_POOL_LIST [=](poolname [, poolname...]) [ENABLE_ARBITRATION_SERVICE = {true | false}] {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...参数说明:
IF NOT EXISTS:可选参数,如果要创建的租户名已存在,并且没有指定IF NOT EXISTS,则会出现错误。tenant_name:指定租户名称。租户名不能是 OceanBase 数据库的关键字。PRIMARY_ZONE:指定租户的 Primary Zone。PRIMARY_ZONE指定了租户提供读写服务的 Zone 的优先级。实际上是一个 Zone 的列表,列表中包含多个 Zone。当列表包含多个 Zone 时,使用分号(;)分隔的 Zone 具有从高到低的优先级,使用逗号(,)分隔的 Zone 具有相同优先级,表示流量打散在多个 Zone 上,这几个 Zone 同时提供服务。例如,
primary_zone ='zone1;zone2,zone3'表示该租户优先由 zone1 提供读写服务,zone1 比 zone2、zone3 的优先级高,zone2 和 zone3 是同一优先级。注意
在指定
PRIMARY_ZONE时,其值可以设置为 RANDOM(必须大写),表示指定租户所在的所有 Zone 作为PRIMARY_ZONE的第一优先级。RESOURCE_POOL_LIST:指定分配给租户的资源池列表,必填。如果有多个资源池:同构 Zone 模式下,要求多个资源池的
UNIT_NUM个数一致。异构 Zone 模式下,租户的多个资源池的
UNIT_NUM个数可以相同也可以不同,但一个租户最多只有两种UNIT_NUM。例如,一租户有 3 个资源池pool1、pool2、pool3,其unit_num分别为 2、4、4,如果将pool3的unit_num修改为 1,则系统会报More than two distinct unit_num in a single tenant not allowed的错误。
租户的副本分布的 Zone List 继承于
RESOURCE_POOL_LIST的ZONE_LIST属性,租户的副本个数继承于RESOURCE_POOL_LIST的ZONE_LIST属性的个数,租户在每个 Zone 的 Unit 个数继承于RESOURCE_POOL_LIST的UNIT_NUM属性、租户的 Unit 的资源规格继承于RESOURCE_POOL_LIST的 Unit 属性。注意
属于同一个租户的多个资源池,对应的
ZONE_LIST彼此不允许有交集。ENABLE_ARBITRATION_SERVICE:指定租户是否开启仲裁服务,如果不显式指定,默认创建的租户其仲裁服务为关闭状态。如果创建租户的时候未开启仲裁服务,可以在创建租户后再开启仲裁服务,详细操作请参见 为租户开启仲裁服务。功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持仲裁服务功能。
system_var_name:指定系统变量或配置项。ob_tcp_invited_nodes:用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户。示例中%表示所有客户端都可登录,如果不显式指定ob_tcp_invited_nodes的值,则默认租户的连接方式为只允许本机的 IP 登录该租户。白名单配置的详细介绍,参见 查看和设置白名单。ob_compatibility_mode:用于指定租户的兼容模式,可选择 MySQL 或 Oracle 兼容模式,并且只能在创建时指定。如果不显式指定ob_compatibility_mode,则默认兼容模式为 MySQL 模式。ob_compatibility_control:用于控制存在 MySQL 兼容行为冲突的功能表现为何种行为,是与 MySQL5.7 的行为保持一致还是与 MySQL8.0 的行为保持一致。创建 MySQL 模式的租户时,需要指定该变量,并且只能在创建时指定,租户创建后不允许修改。如果不显式指定ob_compatibility_control,则默认其兼容行为与 MySQL5.7 保持一致。
CREATE TENANT语句的详细说明,参见 CREATE TENANT。示例:
创建一个名为
mq_t1的租户(默认为 MySQL 模式租户),资源池指定为mq_pool_01,Primary Zone 为 zone1,允许所有 IP 连接数据库。租户的副本分布的 Zone List 继承于
resource_pool_list的zone_list属性,租户的副本个数继承于resource_pool_list的zone_list属性的个数,租户在每个 Zone 的 Unit 个数继承于resource_pool_list的unit_num属性、租户的 Unit 的资源规格继承于resource_pool_list的unit属性。obclient(root@sys)[oceanbase]> CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%';创建一个名为
oracle_tenant1的 Oracle 兼容模式租户,需要显式指定ob_compatibility_mode='oracle'。obclient(root@sys)[oceanbase]>CREATE TENANT IF NOT EXISTS oracle_tenant1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') SET OB_TCP_INVITED_NODES='%', ob_compatibility_mode='oracle';创建一个名为
mq_t2的异构部署的租户(默认为 MySQL 模式租户),资源池指定为mq_pool_01和mq_pool_02,Primary Zone 为zone1,zone2,允许所有 IP 连接数据库。obclient(root@sys)[oceanbase]> CREATE TENANT IF NOT EXISTS mq_t2 PRIMARY_ZONE='zone1,zone2', RESOURCE_POOL_LIST=('mq_pool_01','mq_pool_02') set OB_TCP_INVITED_NODES='%';
查询
DBA_OB_TENANTS视图,确认租户创建成功。例如,确认租户
mq_t1是否创建成功:obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, CREATE_TIME, MODIFY_TIME, PRIMARY_ZONE, LOCALITY, COMPATIBILITY_MODE, STATUS, TENANT_ROLE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';返回结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | COMPATIBILITY_MODE | STATUS | TENANT_ROLE | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ | 1006 | mq_t1 | USER | 2026-01-11 15:06:23.115389 | 2026-01-11 15:06:23.115389 | zone1 | FULL{1}@zone1 | MYSQL | NORMAL | PRIMARY | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+--------------------+--------+-------------+ 1 row in set确认租户
mq_t2是否创建成功:obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, CREATE_TIME, MODIFY_TIME, PRIMARY_ZONE, LOCALITY, COMPATIBILITY_MODE, STATUS, TENANT_ROLE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t2';返回结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+--------------------+--------+-------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | COMPATIBILITY_MODE | STATUS | TENANT_ROLE | +-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+--------------------+--------+-------------+ | 1008 | mq_t2 | USER | 2026-01-11 21:55:14.624399 | 2026-01-11 13:50:39.955638 | zone1,zone2;zone3 | FULL{1}@zome1, FULL{1}@zone2, FULL{1}@zone3 | MYSQL | NORMAL | PRIMARY | +-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+--------------------+--------+-------------+ 1 row in set租户创建成功后,可以尝试登录租户进行使用。
默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,您需要及时修改管理员用户的密码。
MySQL 兼容模式
登录
mq_t1租户的 root 用户。obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -A执行以下语句修改 root 用户的密码。
obclient(root@mq_t1)[(none)]> ALTER USER root IDENTIFIED BY '****'; Query OK, 0 rows affected
Oracle 兼容模式
登录
moracle_tenant1租户的SYS用户。obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -A执行以下语句修改
SYS用户的密码。obclient(syst@oracle_tenant1)[SYS]> ALTER USER sys IDENTIFIED BY ****; Query OK, 0 rows affected
管理员用户密码修改成功后,重新登录租户。
MySQL 兼容模式
obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -AOracle 兼容模式
obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -p**** -A
后续操作
租户创建成功后,您可以使用管理员用户登录并连接数据库,更多连接数据库的方法和详细操作请参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。如果您需要使用普通用户登录,则需要为租户创建新的普通用户并授权,创建用户并授权的相关操作请参见 用户和权限。
相关文档
租户创建后,您可以对租户配置进行查看和维护。详细操作参见: