多租户管理简介
功能简介
TaurusDB提供的多租户管理功能,让数据库能够为其多个租户服务,提高数据库资源利用率。租户间实现数据隔离,不同租户能访问自己的数据。支持租户级资源隔离和用户级资源隔离,资源隔离能够避免浪费和性能扰邻。支持资源动态调整,能够及时应对不同租户或用户的业务高峰和波谷。
多租户管理功能的原理图如下:

上图显示了多租户管理特性的整体流程,租户分为系统租户和普通租户。
上图中有属于系统租户的库DB_1和用户user_1,也有普通租户Tenant_1的库DB_1、DB_2和用户user_1、user_2,以及普通租户Tenant_2的库DB_1、DB_2和用户user_1、user_2。
系统租户有整个数据库实例的访问权限,即系统租户可访问和管理自己所拥有的DB_1、user_1,也可以访问和管理Tenant_1或者Tenant_2下的DB_1、DB_2、user_1、user_2。普通租户有数据隔离,即Tenant_1只能访问和管理自己所拥有的库DB_1、DB_2和用户user_1、user_2,无法访问Tenant_2下的库和用户,也无法访问系统租户下的库和用户。
除了数据隔离,多租还实现了CPU资源隔离。如上图显示了当前实例总的CPU资源,使用者可自定义系统租户和普通租户的资源配置,同时也可以在租户级资源配置的基础上,为租户内的每个用户划分各自所占的资源。
基本概念
使用须知
- 若TaurusDB实例内核版本为2.0.60.241200及其以上,新增的多租视图(包括MT_RESOURCE_CONFIG、MT_TENANT、MT_TENANT_DB、MT_RESOURCE_PLAN、MT_CONSUMER_GROUP、MT_GROUP_MAPPING_RULE、MT_PLAN_DIRECTIVE)将代替旧版本的多租视图DBA_RSRC_*提供服务
- Binlog:目前Binlog没有实现租户隔离,如果允许普通租户拉取Binlog会破坏租户间数据隔离,因此当前禁止普通租户下的用户拉取Binlog。
- 数据库代理:因HTAP标准版不支持带@字符的数据库,普通租户下的数据库迁移到该类HTAP引擎时会更改目标端库名,但数据库代理的自动行存/列存引流功能要求源端和目标端的库名一致,因此普通租户创建的数据库将无法使用数据库代理的自动行存/列存引流功能。
- 备份恢复:
如果原实例的内核版本小于2.0.60.241200且已开启多租功能,目标实例的内核版本是2.0.60.241200及以上,则无法通过备份将原实例恢复至目标实例,此场景__taurus_sys__库可能会被清理,多租功能将无法正常提供服务。
未开启多租开关的目标实例不支持创建带@的用户、数据库和表空间。
- 升降级:
- 如果实例中的多租开关打开,且TaurusDB实例内核版本为2.0.60.241200及其以上,存在需要降级到2.0.60.241200之前的版本的场景。降级成功后,需要再次重启实例,多租功能才能恢复可用,否则降级后的多租开关将变更为关闭。
- 如果TaurusDB实例内核版本为2.0.60.241200及其以上,存在需要降级到2.0.60.241200之前的版本的场景。降级成功后,在information_schema下执行show tables等可能依然会显示新增的多租视图(包括MT_RESOURCE_CONFIG、MT_TENANT、MT_TENANT_DB、MT_RESOURCE_PLAN、MT_CONSUMER_GROUP、MT_GROUP_MAPPING_RULE、MT_PLAN_DIRECTIVE),但无法访问。如需清除残留的多租视图元数据,需要手动重启实例。
- 如果TaurusDB实例内核升级到2.0.60.241200版本及以后,在information_schema下执行show tables命令,可能无法正常显示新增的多租视图。但不影响多租视图的访问,如需显示,需要手动重启实例。
- 兼容性:
- 先开启后关闭多租开关,创建数据库、用户和表空间时,名称中不能包含@字符。
- 普通租户下,数据库名称最大长度由64降低为50,用户名称最大长度由32降低为20。
- 系统库mysql、sys暂不开放给普通租户。
- 普通租户下,系统库performance_schema里的表使用用户名或库名做条件查询时,需要使用模糊搜索。
- 系统租户的root用户可以kill其他用户的session;普通租户的用户,只能kill当前用户的session。
- 多租实例不支持全文索引。