首批通过分布式安全可靠测评,为关键业务系统打造
CREATE TENANT
更新时间:2026-06-14 19:40:37
描述
CREATE TENANT 语句用于创建用户租户。OceanBase 数据库仅支持创建用户租户,系统租户为集群创建时系统自动创建;Meta 租户是 OceanBase 数据库内部自管理的租户,每创建一个用户租户会创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。
通过 CREATE TENANT 语句创建的租户,默认其租户角色为 PRIMARY。
使用限制及注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,需要指定合适的租户的类型。租户创建后,租户类型无法修改。
创建租户时需要为租户分配资源池,需要提前做好资源规划并创建好资源池,创建资源池的相关操作请参见 创建租户。
权限要求
仅 sys 租户的 root 用户(root@sys)可以创建租户,其他租户不支持创建租户。
语法
创建租户的语法如下:
CREATE TENANT [IF NOT EXISTS] tenant_name [tenant_option_list] [set_sys_var];
tenant_option_list:
tenant_option [, tenant_option...]
tenant_option:
LOCALITY [=] 'locality_description'
| PRIMARY_ZONE [=] primary_zone_name
| RESOURCE_POOL_LIST [=] (pool_name [, pool_name...])
| ENABLE_ARBITRATION_SERVICE [=] {True | False}
| {CHARACTER SET | CHARSET} [=] charset_name
| COLLATE [=] collation_name
| COMMENT [=] 'string'
set_sys_var:
{SET | SET VARIABLES | VARIABLES} var_name {TO | =} var_value [,var_name {TO | =} var_value...]
参数说明
| 参数 | 描述 |
|---|---|
| tenant_name | 指定租户名。最长 63 个字节,只能为大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 |
| IF NOT EXISTS | 如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会报错。 |
| LOCALITY | 描述副本在 Zone 间的分布情况。当前版本支持的副本类型如下:
示例: LOCALITY = 'F@z1,F@z2,F@z3'、LOCALITY = 'F@z1,R@z2,C@z3'、LOCALITY = 'F@z1,R@z2,COLUMNSTORE@z3' |
| PRIMARY_ZONE | 指定租户所在的 Primary Zone。主要支持以下取值:
如果创建租户时未指定 Primary Zone,则默认取值为 RANDOM。 |
| RESOURCE_POOL_LIST | 指定分配给租户的资源池列表,创建租户时必须指定该参数。 如果有多个资源池,要求多个资源池的 UNIT_NUM 个数一致。
注意同一个租户的多个资源池,其对应的 |
| ENABLE_ARBITRATION_SERVICE | 指定租户是否开启仲裁服务,如果不指定,默认值为 False。对于集群中有仲裁服务的场景,如果创建租户时未开启仲裁服务,可以在创建租户后再开启仲裁服务,详细操作请参见 为租户开启仲裁服务。 |
| CHARACTER SET | CHARSET | 指定租户级的字符集,有关字符集的详细介绍,请参见 字符集(MySQL 模式) 和 字符集(Oracle 模式)。 |
| COLLATE | 创建 MySQL 兼容模式的租户时,指定租户级的字符序。有关 MySQL 模式下字符序的详细介绍,参见 字符序(MySQL 模式)。
说明创建 Oracle 兼容模式的租户时,不支持设置租户级字符序。如果设置了字符序,语法上不会报错,但设置并不会生效,系统会将其覆盖为字符集对应的默认字符序。 |
| set_sys_var | 指定租户级的系统变量值。有关 var_name 的详细介绍可参见下文 var_name。 |
| COMMENT | 填写注释,可选。 |
var_name
var_name 常用取值如下:
ob_compatibility_mode:用于指定租户的兼容模式(可选 MySQL 或 Oracle 模式),而且只能在创建时指定;如果不指定ob_compatibility_mode,则默认兼容模式为 MySQL。ob_tcp_invited_nodes:用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户。示例中%表示所有客户端都可登录,如果不指定ob_tcp_invited_nodes的值,则默认租户的连接方式为仅允许本机的 IP 登录该租户。lower_case_table_names:用于控制大小写敏感,仅支持使用CREATE TENANT语句创建租户时指定并只在 MySQL 模式下生效,租户创建后不能通过 SQL 语句修改。ob_compatibility_control:用于控制存在 MySQL 兼容行为冲突的功能表现为何种行为。当前取值MYSQL5.7和MYSQL8.0,表示与 MySQL 5.7 的行为保持一致还是与 MySQL 8.0 的行为保持一致。创建 MySQL 模式的租户时,需要指定该变量,并且只能在创建时指定,租户创建后不允许修改。如果不显式指定ob_compatibility_control,则默认其兼容行为与 MySQL 5.7 保持一致。read_only:指定租户为只读模式还是读写模式,如果不设置,默认为读写模式。
示例
创建一个名为
test_tenant的 MySQL 兼容模式的租户,Primary Zone 为zone1;zone2,zone3,资源池为pool1,字符集为utf8mb4,允许所有客户端 IP 连接数据库。obclient [oceanbase]> CREATE TENANT IF NOT EXISTS test_tenant PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1'), CHARSET='utf8mb4' SET ob_tcp_invited_nodes TO '%';创建一个名为
tenant_c的 MySQL 兼容模式的租户,Locality 为F@zone1,F@zone2,C@zone3,Primary Zone 为zone1;zone2,zone3,资源池为pool1,允许所有客户端 IP 连接数据库。注意
创建了包含列存副本的租户后,如果要访问列存副本,需要额外部署 ODP,并进行一系列配置才能将连接路由到列存副本,有关列存副本的详细使用说明,参见 列存副本。
obclient [oceanbase]> CREATE TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,C@zone3', primary_zone='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes = '%';创建一个名为
tenant1的 Oracle 兼容模式的租户,Primary Zone 为zone1,资源池为pool1,允许所有客户端 IP 连接数据库。obclient [oceanbase]> CREATE TENANT tenant1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_compatibility_mode='oracle', ob_tcp_invited_nodes='%';