[TOC] # 新建租户 ## 通过 SQL 语句新建 OceanBase 数据库仅支持 MySQL 类型的租户。只有用 root 用户连接到 sys 租户(`root@sys`)才能执行`CREATE TENANT`命令去创建租户。创建新租户后,可以指定创建租户的类型和白名单。 下述展示了创建租户命令的语法: ~~~ CREATE TENANT [IF NOT EXISTS] tenantname [tenant_characteristic_list] [tenant_variables_list] tenant_characteristic_list: tenant_characteristic [, tenant_characteristic...] tenant_characteristic: COMMENT 'string' | {CHARACTER SET | CHARSET} [=] value | REPLICA_NUM [=] num | ZONE_LIST [=] (zone [, zone]) | PRIMARY_ZONE [=] zone | RESOURCE_POOL_LIST [=] (poolname) | {READ ONLY | READ WRITE} tenant_variables_list: SET sys_variables_list | SET VARIABLES sys_variables_list | VARIABLES sys_variables_list sys_variables_list: sys_variables [, sys_variables...] sys_variables: sys_variable_name = expr ~~~ 参数说明: * 如果要创建的租户名已存在,并且没有指定`IF NOT EXISTS`,则会出现错误。 * 租户名的合法性和变量名一致,最长 30 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 * 在租户下可以指定资源池。 * `RESOURCE_POOL_LIST`为创建租户时的必填项。 * `CREATE TENANT`命令中的`RESOURCE_POOL_LIST`中,暂时仅支持一个资源池。 **示例 1**: 下述语句展示了创建名为`test_tenant`的一个 3 副本的 MySQL 租户(创建新租户默认是 MySQL 租户)。 ~~~ obclient> CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1') ~~~ **示例 2**: 下述语句展示了创建租户后,直接通过修改变量`ob_tcp_innvited_nodes`的值为`%`以便允许任何客户端 IP 连接该租户。如果不调整,默认租户的连接方式为只允许本机的 IP 连接数据库。 ~~~ obclient> CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1') SET ob_tcp_invited_nodes='%' ~~~ 示例说明如下: * `primary_zone`指该租户的表的分区 Leader 所在的 Zone ,例如,`primary_ zone =' zone1; zone2, zone3'`表示该租户的表的分区 Leader 在`zone1`上, 这时通过分号来分隔。 * `zone2`和`zone3`通过逗号分割,表示`zone2`和`zone3`是同一优先级,但是比`zone1`优先级低。 * `primary_zone`设置时,其值可以为`RANDOM`(必须大写),表示随机。 普通租户的内存最小规格必须大于等于 5 GB,否则创建租户失败。如果希望建立租户进行非常简单的功能测试,可以修改参数`alter system __min_full_resource_pool_memory`的值为`1073741824`来允许以最小 1 GB 内存的规格创建租户。