创建租户步骤

创建租户

OceanBase 集群支持 MySQL 模式和 Oracle 模式的租户,本教程以创建 MySQL 租户为例进行介绍。租户可以理解为 MySQL 或 Oracle 等传统数据库中的实例,一个租户相当于一个实例租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额在租户下可以创建 Database(MySQL 模式)、用户、表等数据库对象。

创建租户的流程

OceanBase 数据库仅支持创建用户租户系统租户由集群创建时自动创建 。创建用户租户是一系列操作的组合,首先创建资源规格,然后基于该资源规格创建资源池,最后创建租户并指定其资源池。所以创建租户的顺序为:资源规格 → 资源池 → 租户。

注意事项

  • 创建租户前需要做好资源规划。
  • OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式

创建资源规格

资源规格是对 CPU、内存、磁盘空间、IOPS 等资源项进行的定义。

可以通过 CREATE RESOURCE UNIT 语句,创建资源规格。

使用 root 用户连接到集群的 ocenabase 数据库

obclient -h192.168.63.201 -P2881 -uroot@sys -p'ggj0F8Yt0MzZ3mnGy8r8' -Doceanbase -A

获取已有的资源规格信息

通过 DBA_OB_UNIT_CONFIGS 视图,获取已有的资源规格信息。

SELECT * FROM DBA_OB_UNIT_CONFIGS;

输出结果如下:

obclient(root@sys)[oceanbase]> SELECT * FROM DBA_OB_UNIT_CONFIGS;
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_CONFIG_ID | NAME            | CREATE_TIME                | MODIFY_TIME                | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS            | MIN_IOPS            | IOPS_WEIGHT |
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
|              1 | sys_unit_config | 2025-08-11 12:07:41.719946 | 2025-08-11 12:08:03.347411 |       2 |       2 |  1073741824 |    2147483648 | 9223372036854775807 | 9223372036854775807 |           2 |
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
1 row in set (0.002 sec)

从上述查询结果可以看出,系统默认创建一个名为 sys_unit_config 的 Unit,默认最大和最小可使用 CPU 为 2C,内存大小为 1073741824/1024/1024/1024 = 1G,日志盘大小为 2147483648/1024/1024/1024 = 2G。

创建资源规格

创建资源规格

通过 CREATE RESOURCE UNIT 语句,创建资源规格。示例:

示例:创建一个名称为 s1_unit_config 的资源规格,其资源配置为 CPU 为 1 核,内存 2G,日志盘空间 6G。

CREATE RESOURCE UNIT s1_unit_config
                MEMORY_SIZE = '2G',
                MAX_CPU = 1, MIN_CPU = 1,
                LOG_DISK_SIZE = '6G',
                MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;

参数说明:创建资源规格时,MAX_CPU 和 MEMORY_SIZE 必 选。

  • unit_name :资源规格名称。
  • MAX_CPU :CPU 规格上限,MIN_CPU 是 CPU 规格下限,单位是核数如果用户没有指定 MIN_CPU ,默认等于 MAX_CPU
  • MIN_CPU :最小的 CPU 规格,所有租户的 MIN_CPU 的总和不能超过该节点 CPU 总容量 CPU_CAPACITY
  • MEMORY_SIZE :内存规格,最小为 1G。OceanBase 数据库 V4.0 开始不支持内存超卖
  • LOG_DISK_SIZE :日志盘空间,OceanBase 数据库 V4.0 会按租户管理日志盘空间系统为各个租户预留日志盘空间,实现按租户隔离当用户没有指定时, LOG_DISK_SIZE 默认值是内存规格的 3 倍大小,最小为 2G。
  • OceanBase 数据库 V4.0 支持租户间 IOPS 隔离 ,通过 MAX_IOPSMIN_IOPSIOPS_WEIGHT 三个参数决定。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算

验证资源规格创建成功

查询 DBA_OB_UNIT_CONFIGS 视图,确认资源规格创建成功。

SELECT * FROM DBA_OB_UNIT_CONFIGS WHERE NAME = 's1_unit_config';

输出结果如下:

obclient(root@sys)[oceanbase]> SELECT * FROM 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 | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
|           1002 | s1_unit_config | 2025-09-15 16:39:48.005820 | 2025-09-15 16:39:48.005820 |       1 |       1 |  2147483648 |    6442450944 |    10000 |    10000 |           1 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set (0.000 sec)

创建资源池

创建资源规格后,可以在创建资源池时指定资源规格从而使用相应大小的资源单元 ,并最终分配给相应的租户。

可以通过 CREATE RESOURCE POOL 语句,创建资源池。

注意事项

确认集群是否有足够的可用资源来创建资源池。

创建资源池

获取资源池的配置信息

创建资源规格后,通过 DBA_OB_RESOURCE_POOLS 视图,获取资源池的配置信息。

SELECT * FROM DBA_OB_RESOURCE_POOLS;

输出信息如下:

obclient(root@sys)[oceanbase]> SELECT * FROM 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-08-11 12:07:41.724685 | 2025-08-11 12:07:41.734644 |          1 |              1 | zone1     | FULL         |
+------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
1 row in set (0.002 sec)

创建资源池

通过 CREATE RESOURCE POOL 语句,创建资源池。

示例:创建一个名为 mq_pool_01 的资源池,在 zone1 里创建 1 个 Unit,每个 Unit 的资源规格为 s1_unit_config

CREATE RESOURCE POOL mq_pool_01 
                UNIT='s1_unit_config', 
                UNIT_NUM=1, 
                ZONE_LIST=('zone1'); 

参数说明:

  • UNIT :该资源池的资源规格。这里注意,创建时,系统识别资源规格名字大小写,但是在直接查询相关视图时会把名字统一转换为小写。
  • UNIT_NUM :该资源池在目标 Zone 的 Unit 个数 ,它的值要小于目标 Zone 的节点个数 ,且每个节点上最多只能分布同一个租户的一个 Unit单机版该值只能为 1
  • ZONE_LIST :资源池的 Zone 分布。OceanBase 数据库会在 ZONE_LIST 描述的每个 Zone 里面创建 UNIT_NUM 个 Unit,每个 Unit 的资源规格为 UNIT 参数设置的值。单机版该值唯一,为上述 DBA_OB_RESOURCE_POOLS 视图查询的值。

验证资源池创建成功

查询 DBA_OB_RESOURCE_POOLS 视图,确认资源池创建成功。

SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';

输出结果如下:

obclient(root@sys)[oceanbase]> SELECT * FROM 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 |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
|             1002 | mq_pool_01 |      NULL | 2025-09-15 16:44:59.708309 | 2025-09-15 16:44:59.708309 |          1 |           1002 | zone1     | FULL         |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
1 row in set (0.003 sec)

创建租户

资源池创建后,可以根据业务需要,将资源池分配给租户。

通过 CREATE TENANT 语句,创建租户。

注意事项

OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。

创建租户

查看所有的租户信息

创建资源池后,通过 DBA_OB_TENANTS 视图,查看所有的租户信息。

SELECT * FROM DBA_OB_TENANTS;

输出结果如下:

obclient(root@sys)[oceanbase]> SELECT * FROM DBA_OB_TENANTS;
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME                | MODIFY_TIME                | PRIMARY_ZONE | LOCALITY      | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE     | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID | FLASHBACK_LOG_SCN |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
|         1 | sys         | SYS         | 2025-08-11 12:07:41.755044 | 2025-08-11 12:07:41.755044 | RANDOM       | FULL{1}@zone1 | NULL              | MYSQL              | NORMAL | NO            | NO     | PRIMARY     | NORMAL            |                0 |     NULL |           NULL |         NULL |               NULL | NOARCHIVELOG | DISABLED                   |        1 | 4.2.5.4    |         1 |              NULL |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
1 row in set (0.044 sec)

创建租户

通过 CREATE TENANT 语句,创建租户。示例:

示例:创建一个名为 mq_t1 的租户(默认为 MySQL 模式租户),副本数为 1,资源池指定为 mq_pool_01 ,Primary Zone 为 zone1,允许所有 IP 连接数据库。

租户的副本分布的 Zone List 继承于 resource_pool_listzone_list 属性,租户的副本个数继承于 resource_pool_listzone_list 属性的个数,租户在每个 Zone 的 Unit 个数继承于 resource_pool_listunit_num 属性、租户的 Unit 的资源规格继承于 resource_pool_listunit 属性。

CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%';

参数说明:

  • IF NOT EXISTS :可选参数,如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS ,则会出现错误。
  • tenant_name :指定租户名称,最长 128 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头。
  • PRIMARY_ZONE :指定租户的 Primary Zone。V4.0 版本修改 Primary Zone 功能并不完善,并不能实现租户下已有表和分区的读写服务能力的扩缩容 。建议用户创建租户时一次性配置好租户的 Primary Zone 属性。PRIMARY_ZONE 指定了租户提供读写服务的 Zone 的优先级。实际上是一个 Zone 的列表,列表中包含多个 Zone。 当列表包含多个 Zone 时,使用分号(;) 分隔的 Zone 具有从高到低 的优先级,使用逗号(,) 分隔的 Zone 具有相同优先级 ,表示流量打散在多个 Zone 上,这几个 Zone 同时提供服务。单机版有且只有一个 Zone。在指定 PRIMARY_ZONE 时,其值可以设置为 RANDOM(必须大写),表示随机选择最高优先级内 的任意一个 Zone 作为 Primary Zone
  • RESOURCE_POOL_LIST :指定分配给租户的资源池列表,必填。如果有多个资源池,要求多个资源池的 UNIT_NUM 个数一致。单机版有且只有一个资源池。

租户的副本分布的 Zone List 继承于 RESOURCE_POOL_LISTZONE_LIST 属性,租户的副本个数继承于 RESOURCE_POOL_LISTZONE_LIST 属性的个数,租户在每个 Zone 的 Unit 个数继承于 RESOURCE_POOL_LISTUNIT_NUM 属性、租户的 Unit 的资源规格继承于 RESOURCE_POOL_LIST 的 Unit 属性。

  • system_var_name :指定系统变量或配置项。

    • OB_TCP_INVITED_NODES :用于指定租户连接的白名单 ,即允许哪些客户端 IP 连接该租户。示例中 % 表示所有客户端都可登录,如果不指定 OB_TCP_INVITED_NODES 的值,则默认租户的连接方式为只允许本机的 IP 登录该租户
    • OB_COMPATIBILITY_MODE :用于指定租户的兼容模式,可选择 MySQL 或 Oracle 兼容模式,并且只能在创建时指定。 如果不指定 OB_COMPATIBILITY_MODE ,则默认兼容模式为 MySQL 模式。

验证租户创建成功

查询 DBA_OB_TENANTS 视图,确认租户创建成功。

SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

输出如下:

obclient(root@sys)[oceanbase]> SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME                | MODIFY_TIME                | PRIMARY_ZONE | LOCALITY      | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN            | REPLAYABLE_SCN      | READABLE_SCN        | RECOVERY_UNTIL_SCN  | LOG_MODE     | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID | FLASHBACK_LOG_SCN |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
|      1004 | mq_t1       | USER        | 2025-09-15 17:02:29.670201 | 2025-09-15 17:02:55.205789 | zone1        | FULL{1}@zone1 | NULL              | MYSQL              | NORMAL | NO            | NO     | PRIMARY     | NORMAL            |                0 | 1757927579623242000 | 1757927579623242000 | 1757927579522404000 | 4611686018427387903 | NOARCHIVELOG | DISABLED                   |        1 | 4.2.5.4    |      1001 |              NULL |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+
1 row in set (0.040 sec)

登录新创建的租户

租户创建成功后,退出当前连接,尝试登录新创建的租户进行使用。

默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,需要及时修改管理员用户的密码。

执行 exit 退出集群后,重新登录 mq_t1 租户的 root 用户。

obclient -h127.0.0.1 -P2881 -uroot@mq_t1 -A

修改 root 用户的密码

ALTER USER root IDENTIFIED BY 'oceanbase';

重新登录新创建的租户

管理员用户密码修改成功后,执行 exit 退出集群后,重新登录新创建的租户。

obclient -h192.168.63.201 -P2881 -uroot@mq_t1 -p'oceanbase' -Doceanbase -A
1 个赞