【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】 5.7.25-OceanBase_CE-v4.3.5.0
【问题描述】
1.OB官方建议业务数据不要使用sys租户,如果现在有一套mysql需要迁移至OB,为了最小化整个迁移过程的影响,比如尽量不修改用户名和密码,但是OB这边使用了业务租户,使用mysql客户端连接时是否可以直接设置指定账号连接到业务租户。
2.怎样能够让业务租户尽可能的使用所有的系统资源,CPU、内存、IO,是否可以系统自动配置。
3.用户默认连接的是sys租户,如果想连接其他租户需要使用@租户名
1 个赞
辞霜
#3
租户下面是可以自己创建用户的。
你创建租户的时间自己可以分配租户的cpu和内存,这个系统无法自动配置。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002015467
ob的连接串例子带obproxy:
mysql -h321.123.123.321 -P2883 -uroot@租户名#集群名 -p -A
1 个赞
租户下面是可以自己创建用户的。 – 意思是说租户下面创建的用户,连接会默认连接到指定的租户么?
我测试在指定租户下创建了用户,连接时连接串上还是需要@租户名称才能连接到指定租户
甯空
#6
-uroot@租户名#集群名
这其实就是一个帐号名,通过#号,@号来路由到指定的集群,指定的租户。
明白,那这样就等于如果想使用mysql 驱动去连接ob的话,就无法最小化连接串的改动,如果mysql迁移到ob,整库的连接串都得修改才行。
甯空
#8
你是想按mysql一样,程序都不用改动了,直接换个IP和端口,应该是不行的。
辞霜
#9
mysql迁移到ob连接串需要修改一下。你可以下载个ODC开发工具尝试登录连接下ob各个用户租户试试就能搞明白连接串使用方法了。
我主要想实现的是不修改原来的msqyl连接串,然后直接连接OB,因为我们业务系统里面的连接串比较多,我们手动去修改的话不一定能全部一次改正确
你好,之前我研究过这个内容,不知道以下方式是否满足需求,
1、修改obproxy端口为3306
2、alter proxyconfig set enable_full_username=‘false’;
用于非云用户,控制用户名是否须包含租户和集群。
3、修改enable_full_username为false,可以通过用户名登录数据库,set proxy_tenant_name可以绑定OBProxy连接的租户,实现应用在Mysql和OBmysql的平滑切换
4、完成后,可以使用 mysql -uroot 这样的方式登录
参考: 从MySQL到OBMySQL平滑切换之连接方式的道路探索-数据库技术博客-OceanBase分布式数据库
3 个赞
甯空
#13
这样就能obproxy上面实现,多集群,多租户了。
JDBC或者连他的连接器不改不行的,因为OB的账户结构跟传统的MySQL不一样,他是用户@租户名的拼接结构
论坛小助手
#18
根据您的问题描述,以下是针对每个问题的详细解答:
问题 1:是否可以通过指定账号直接连接到业务租户?
回答:
根据文档库中的信息(参考片段标题:登录 OceanBase 租户),默认情况下,用户连接 OceanBase 数据库时需要明确指定租户名称。即使在业务租户下创建了用户,连接时仍然需要通过 @租户名
的方式指定目标租户。
例如,使用 MySQL 客户端连接时,连接串格式如下:
obclient -h<host> -u<username>@<tenant_name> -P<port> -p<password>
因此,如果希望不修改连接串的情况下直接连接到业务租户,目前无法实现。OceanBase 的设计要求明确指定租户名称以确保多租户环境下的隔离性和安全性。
问题 2:如何让业务租户尽可能使用所有系统资源?
回答:
根据文档库中的信息(参考片段标题:创建租户 → 创建租户的流程),租户的资源配置是通过以下步骤完成的:
-
创建资源规格
资源规格定义了 CPU、内存等资源的分配比例。可以通过 DBA_OB_UNIT_CONFIGS
视图查看已有的资源规格。
-
创建资源池
资源池将资源规格绑定到具体的物理节点上。如果希望租户尽可能使用所有系统资源,可以为该租户分配一个覆盖所有可用节点的资源池,并设置较大的资源规格。
-
创建租户并绑定资源池
在创建租户时,通过 RESOURCE_POOL_LIST
参数将资源池分配给租户。
具体 SQL 示例:
-- 创建资源规格
CREATE RESOURCE UNIT unit_spec_1 MAX_CPU 8, MEMORY_SIZE '8G';
-- 创建资源池
CREATE RESOURCE POOL pool_spec_1 UNIT_CONFIG='unit_spec_1' UNIT [['server1'], ['server2']];
-- 创建租户并绑定资源池
CREATE TENANT tenant_spec_1 RESOURCE_POOL_LIST=['pool_spec_1'];
需要注意的是,OceanBase 的资源分配机制是静态的,无法完全动态地自动调整资源分配比例。因此,建议根据业务负载情况手动调整资源池和规格配置。
问题 3:租户下创建的用户是否默认连接到指定租户?
回答:
根据文档库中的信息(参考片段标题:租户介绍 → 用户租户),租户下的用户只能访问所属租户的资源,但连接时仍然需要显式指定租户名称。换句话说,即使在某个租户下创建了用户,连接时仍然需要通过 @租户名
的方式指定目标租户。
例如:
obclient -h<host> -u<username>@<tenant_name> -P<port> -p<password>
因此,租户下的用户并不会默认连接到指定租户,必须在连接串中明确指定租户名称。
问题 4:如何实现不修改 MySQL 连接串的情况下直接连接 OB?
回答:
根据文档库中的信息(参考片段标题:通过 OBClient 连接 OceanBase 租户),目前 OceanBase 的设计要求在连接串中明确指定租户名称。因此,如果不修改连接串,则无法直接连接到目标租户。
可能的解决方案:
-
使用 ODP(OceanBase Data Proxy)
如果您希望通过最小化改动实现连接,可以考虑使用 OBProxy 或 ODP。ODP 可以通过 SERVICE_NAME
的方式简化连接串配置。例如:
obclient -h<host> -P<port> -u<username>@SERVICE:<service_name> -p<password>
需要注意的是,此功能依赖于 OCP 平台(参考片段标题:通过 ODP 连接的方式)。
-
批量修改连接串
如果业务系统中存在大量连接串,可以编写脚本批量替换连接串中的用户名部分,添加 @租户名
的后缀。
-
自定义代理层
如果上述方案均不可行,可以考虑在应用层或网络层引入自定义代理,将原始连接串自动转换为目标格式。
总结
- OceanBase 的设计要求在连接串中明确指定租户名称,因此无法通过仅指定账号的方式直接连接到业务租户。
- 业务租户的资源配置可以通过创建资源规格、资源池和绑定租户的方式实现最大化利用系统资源。
- 租户下的用户不会默认连接到指定租户,必须在连接串中明确指定租户名称。
- 如果希望最小化连接串改动,可以考虑使用 ODP 或自定义代理层实现。
如果您有进一步的需求或疑问,请提供更多细节,我们将尽力为您解答!
具体信息可参考以下文档:
- 体验多租户特性
- 其他结构设计
- 创建租户
- 登录 OceanBase 租户
- 通过 OBClient 连接 OceanBase 租户
- 租户介绍
- 使用 MySQL 租户做常见数据库开发