OceanBase学习之路34|如何新建租户?

您可以通过 SQL 语句新建租户。

创建租户的语法

OceanBase 数据库只有  root 用户连接到  sys 租户( root@sys)才能执行  CREATE TENANT 命令去创建租户。

创建租户的 SQL 语法如下:

CREATE TENANT [IF NOT EXISTS] tenant_name 
     [tenant_characteristic_list] [opt_set_sys_var];
tenant_characteristic_list: 
  tenant_characteristic [, tenant_characteristic...]
tenant_characteristic: 
      COMMENT 'string'  
    | {CHARACTER SET | CHARSET} [=] charsetname 
    | COLLATE [=]  collationname
    | ZONE_LIST [=] (zone [, zone...]) 
    | PRIMARY_ZONE [=] zone  
    | DEFAULT TABLEGROUP [=] {NULL | tablegroup}
    | RESOURCE_POOL_LIST [=](poolname [, poolname...])
    | LOCALITY [=] 'locality description'
opt_set_sys_var:
  {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...

语法中参数说明如下表所示。

参数 描述
IF NOT EXISTS 可选参数,如果要创建的租户名已存在,并且没有指定  IF NOT EXISTS,则会出现错误。
tenant_name 租户名的合法性和变量名一致,最长 128 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 OceanBase 数据库中所支持的关键字请参见  预留关键字
RESOURCE_POOL_LIST 创建租户时的必填项,创建租户时仅支持分配一个资源池。如果需要为租户添加多个资源池,则可以待租户创建成功后通过修改租户资源池的方式再进行添加。
注意
在分配资源池时,普通租户的内存的最小规格由隐藏配置项  __min_full_resource_pool_memory 控制,默认值为 5G,取值范围为 [1073741824,+∞)。如果您希望创建一个租户进行非常简单的功能测试,可以修改参数  alter system __min_full_resource_pool_memory 的值为 1073741824 来允许以最小 1 GB 内存的规格创建租户。
DEFAULT TABLEGROUP 用于指定租户默认的表组信息, NULL 表示取消默认表组。如果不指定,默认为  NULL
COMMENT 指定对该租户的注释信息。
CHARACTER SET | CHARSET 指定租户的字符集。
字符集相关的介绍信息请参见  字符集
COLLATE 指定租户的字符序。
字符序相关的介绍信息请参见  字符序
ZONE_LIST 指定租户的 Zone 列表。
PRIMARY_ZONE 指定租户的 Primary Zone。Primary Zone 表示 Leader 副本的偏好位置。指定 Primary Zone 实际上是指定了 Leader 更趋向于被调度到哪个 Zone 上。 Primary Zone 实际上是一个 Zone 的列表,列表中包含多个 Zone。当 Primary Zone 列表包含多个 Zone 时,使用分号(;)分隔的 Zone 具有从高到底的优先级;使用逗号(,)分隔的 Zone 具有相同优先级。例如, primary_ zone =' zone1; zone2, zone3' 表示该租户的表的分区 Leader 在  zone1 上,  zone1 比  zone2zone3 的优先级高, zone2 和  zone3 是同一优先级。
注意
在指定  PRIMARY_ZONE 时,其值可以设置为  RANDOM(必须大写),表示随机选择最高优先级内的任意一个 Zone 作为 Primary Zone。

更多 Primary Zone 相关的介绍信息请参见  Primary Zone
LOCALITY 指定副本在 Zone 间的分布情况。
例如: F@z1,F@z2,F@z3,F@z4 表示  z1z2z3 、 z4 为全功能副本。
system_var_name 可选,指定租户的系统变量值,其中:
  • 变量  ob_compatibility_mode 用于指定租户的兼容模式,仅可选择 MySQL模式,并且只能在创建时指定。如果不指定  ob_compatibility_mode,则默认兼容模式为 MySQL 模式。
  • 变量  ob_tcp_invited_nodes 用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户。如果不调整  ob_tcp_invited_nodes 的值,则默认租户的连接方式为只允许本机的 IP 连接数据库。
    您也可以待租户创建成功后再修改其白名单设置,修改白名单的具体操作请参见  设置和查看租户白名单
    OceanBase 数据库中,租户可设置的系统变量请参见  系统变量

使用示例

  • 创建名为  test_tenant 的一个 3 副本的租户。

    obclient> CREATE TENANT IF NOT EXISTS test_tenant CHARSET='utf8mb4', ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1');
  • 创建租户,并指定允许任何客户端 IP 连接该租户。

    obclient> CREATE TENANT IF NOT EXISTS test_tenant CHARSET='utf8mb4',ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes='%' ;

确认租户是否创建成功

创建租户后,您可以通过查询  oceanbase.DBA_OB_TENANTS 视图来确认租户是否创建成功。

  1. 使用  root 用户登录到数据库的  sys 租户。

  2. 执行以下语句,查看当前集群中是否有新创建的租户。

    示例如下:

    obclient> SELECT * FROM oceanbase.DBA_OB_TENANTS\G
    *************************** 1. row ***************************
             TENANT_ID: 1
          TENANT_NAME: sys
          TENANT_TYPE: SYS
          CREATE_TIME: 2022-07-04 14:27:07.909820
          PRIMARY_ZONE: RANDOM
             LOCALITY: FULL{1}@zone1
    PREVIOUS_LOCALITY: NULL
    COMPATIBILITY_MODE: MYSQL
                STATUS: TENANT_STATUS_NORMAL
       IN_RECYCLEBIN: NO
                LOCKED: NO
    *************************** 2. row ***************************
             TENANT_ID: 1001
          TENANT_NAME: META$1002
          TENANT_TYPE: META
          CREATE_TIME: 2022-07-04 14:40:17.802321
          PRIMARY_ZONE: zone1
             LOCALITY: FULL{1}@zone1
    PREVIOUS_LOCALITY: NULL
    COMPATIBILITY_MODE: MYSQL
                STATUS: TENANT_STATUS_NORMAL
       IN_RECYCLEBIN: NO
                LOCKED: NO
    *************************** 3. row ***************************
             TENANT_ID: 1002
          TENANT_NAME: MySQL
          TENANT_TYPE: USER
          CREATE_TIME: 2022-07-04 14:40:17.827586
          PRIMARY_ZONE: zone1
             LOCALITY: FULL{1}@zone1
    PREVIOUS_LOCALITY: NULL
    COMPATIBILITY_MODE: MYSQL
                STATUS: TENANT_STATUS_NORMAL
       IN_RECYCLEBIN: NO
                LOCKED: NO
    *************************** 4. row ***************************
             TENANT_ID: 1003
          TENANT_NAME: META$1004
          TENANT_TYPE: META
          CREATE_TIME: 2022-07-04 14:41:01.109771
          PRIMARY_ZONE: zone1
             LOCALITY: FULL{1}@zone1
    PREVIOUS_LOCALITY: NULL
    COMPATIBILITY_MODE: MYSQL
                STATUS: TENANT_STATUS_NORMAL
       IN_RECYCLEBIN: NO
                LOCKED: NO
    4 rows in set

    租户创建成功后,默认其管理员用户为  root 的密码为空,您需要及时修改管理员用户的密码,  修改用户密码

后续处理

租户创建成功后,您可以使用管理员用户登录并连接数据库,具体操作请参见  连接数据库。如果您需要使用普通用户登录,则需要为租户创建新的普通用户并授权,创建用户并授权的相关操作请参见  管理用户和权限 章节。


请使用浏览器的分享功能分享到微信等