创建 MySQL 租户
OceanBase 集群支持 MySQL 模式和 Oracle 模式的租户 。租户可以理解 为 MySQL 或 Oracle 等传统数据库中的实例 ,一个租户相当于一个实例。租户通过资源池与资源关联,从而独占一定的资源配额 ,可以动态调整资源配额 。在租户下可以创建 Database(MySQL 模式)、用户、表等数据库对象 。
创建租户的流程
OceanBase 数据库仅支持创建用户租户,系统租户由集群创建时自动创建 。创建用户租户是一系列操作的组合,首先创建资源规格 ,然后基于该资源规格创建资源池 ,最后创建租户并指定其资源池 。所以创建租户的顺序为:资源规格 → 资源池 → 租户。
注意事项
- 创建租户前需要做好资源规划。
- OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。
创建资源规格的步骤
资源规格是对 CPU、内存、磁盘空间、IOPS 等资源项进行的定义。
可以通过 CREATE RESOURCE UNIT
语句,创建资源规格。
连接集群
使用 root
用户登录 obcluster 集群的 sys 租户。
obclient -h127.0.0.1 -P2883 -uroot@sys#obcluster -Doceanbase -A
获取已有的资源规格信息
通过 DBA_OB_UNIT_CONFIGS
视图,获取已有的资源规格信息。
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-06-16 17:12:20.916675 | 2025-06-16 17:12:20.916675 | 3 | 3 | 2147483648 | 2147483648 | 9223372036854775807 | 9223372036854775807 | 3 |
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
1 row in set (0.028 sec)
从上述查询结果可以看出,系统默认创建一个名为 sys_unit_config 的 unit,默认最大和最小可使用 CPU 为 3C,内存大小为 2147483648/1024/1024/1024 = 2G,日志盘大小为 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_IOPS
、MIN_IOPS
、IOPS_WEIGHT
三个参数决定 。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算 。
确认资源规格创建成功
查询 DBA_OB_UNIT_CONFIGS
视图 ,确认资源规格创建成功。
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 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1001 | s1_unit_config | 2025-09-18 16:37:25.957429 | 2025-09-18 16:37:25.957429 | 1 | 1 | 2147483648 | 6442450944 | 10000 | 10000 | 1 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set (0.003 sec)
创建资源池的步骤
创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。
可以通过 CREATE RESOURCE POOL
语句,创建资源池。
注意事项:确认集群是否有足够的可用资源来创建资源池。
获取资源池的配置信息
创建资源规格后,通过 DBA_OB_RESOURCE_POOLS
视图 ,获取资源池的配置信息。
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-06-16 17:12:20.920342 | 2025-06-16 17:12:20.930196 | 1 | 1 | zone1;zone2;zone3 | FULL |
+------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
1 row in set (0.028 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;
参数说明:
-
UNIT
:该资源池的资源规格。这里注意,创建时,系统识别资源规格名字大小写,但是在直接查询相关视图时会把名字统一转换为小写。 -
UNIT_NUM
:该资源池在目标 Zone 的 Unit 个数,它的值要小于目标 Zone 的节点个数,且每个节点上最多只能分布同一个租户的一个 Unit。
确认资源池创建成功
查询 DBA_OB_RESOURCE_POOLS
视图,确认资源池创建成功。
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 |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
| 1001 | mq_pool_01 | NULL | 2025-09-18 16:45:58.869155 | 2025-09-18 16:45:58.869155 | 1 | 1001 | zone1;zone2;zone3 | FULL |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
1 row in set (0.003 sec)
创建租户的步骤
资源池创建后,将资源池分配给租户。
通过 CREATE TENANT
语句,创建租户。
查看所有的租户信息
创建资源池后,通过 DBA_OB_TENANTS
视图,查看所有的租户信息。
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 |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+
| 1 | sys | SYS | 2025-06-16 17:12:20.944405 | 2025-06-16 17:12:20.944405 | RANDOM | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | 1 | 4.3.1.0 | 1 |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+----------+----------------+--------------+--------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set (0.034 sec)
创建租户
通过 CREATE TENANT
语句,创建一个名为 mq_t1
的 MySQL 租户,副本数为 3,资源池指定为 mq_pool_01
,Primary Zone 为 zone1;zone2;zone3
,允许所有 IP 连接数据库。
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
:指定租户名称。租户名不能是 OceanBase 数据库的关键字。 -
PRIMARY_ZONE
:指定租户的 Primary Zone。 -
RESOURCE_POOL_LIST
:指定分配给租户的资源池列表**,必填** 。如果有多个资源池,要求多个资源池的 UNIT_NUM 个数一致 。 -
OB_TCP_INVITED_NODES
:用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户 。示例中 % 表示所有客户端都可登录,如果不显式指定OB_TCP_INVITED_NODES
的值,则默认租户的连接方式为只允许本机的 IP 登录该租户。
确认租户创建成功
DBA_OB_TENANTS
视图,确认租户创建成功
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 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1002 | mq_t1 | USER | 2025-09-18 16:49:24.373641 | 2025-09-18 16:49:50.136963 | zone1;zone2,zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1758185468121313003 | 1758185468121313003 | 1758185468121313003 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 1 | 4.3.1.0 | 1001 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set (0.021 sec)
登录新创建的租户进行使用
租户创建成功后,退出当前连接,尝试登录新创建的租户进行使用。
默认管理员用户(MySQL 模式为 root)的密码为空 ,您需要及时修改管理员用户的密码。
执行 exit
退出集群后,使用新创建的租户登录集群。使用 root
用户登录 obcluster 集群的 MySQL 模式租户 mq_t1
。
[admin@xxx ~]obclient -h127.0.0.1 -P2883 -uroot@mq_t1#obcluster -Doceanbase -A
执行以下语句修改用户密码,这里以 root 用户为例。
ALTER USER root IDENTIFIED BY '0123456789';
管理员用户密码修改成功后,执行 exit
退出集群后,重新登录新创建的租户。
[admin@xxx ~]obclient -h127.0.0.1 -P2883 -uroot@mq_t1#obcluster -p0123456789 -A