从MySQL到OBMySQL平滑切换之连接方式

从MySQL到OBMySQL平滑切换之连接方式(简化用户名-设置所有用户默认连接的租户)

一、背景说明

在非云环境部署的 OceanBase 集群中,OBProxy 默认要求用户名必须包含租户和集群信息(格式:用户名@租户#集群)。为适配传统 MySQL 连接习惯(仅使用 -u用户名),需通过调整 OBProxy 参数实现简化登录。本文档提供完整配置方案及验证流程。

二、环境信息

组件 版本 部署方式 网络说明
OBServer 4.2.5 多节点集群 IP: xx.xx.xx.xx
OBProxy 4.3.1 configurl/rslist 代理端口: 3306
客户端工具 MySQL 8.0 - -

三、关键参数说明

enable_full_username作用:控制用户名是否强制包含租户和集群信息。默认值:true(OBProxy ≥3.2.2 版本默认由 OCP 设置为 false)。非云场景:需手动设置为 false 以支持简化用户名登录。
proxy_tenant_name作用:绑定 OBProxy 连接的默认租户,避免客户端显式指定租户。推荐值:设为业务租户名(如 obmysql)。

**rootservice_cluster_name **
根据登录方式的不同,rootservice_cluster_name 配置项有如下几种作用:

  • 通过 Service Name 登录时,该配置项表示读写分离下的默认备集群。
  • 非 Service Name 登录时,该配置项用于设置 rootservice_list 的默认集群名,或云用户的默认集群名。
    该配置项自 ODP 4.3.3 版本起更新,区分是否通过 Service Name 登录,通过 Service Name 登陆时,该配置项表示读写分离下的默认备集群。
    rootservice_cluster_name

四、配置操作步骤

1. 修改 OBProxy 参数

通过 OBProxy 管理连接执行:

-- 启用简化用户名模式
ALTER PROXYCONFIG SET enable_full_username = 'false';

-- 绑定默认租户(示例为 obmysql 租户)
ALTER PROXYCONFIG SET proxy_tenant_name = 'obmysql';

alter proxyconfig set rootservice_cluster_name='obcluster435';

-- 查看参数生效状态
SHOW PROXYCONFIG LIKE '%username%';
SHOW PROXYCONFIG LIKE '%proxy_tenant%';

2. 配置验证

验证场景 1:传统MySQL用户名登录

# 使用简化用户名连接(无需 @tenant#cluster 后缀)
mysql -uroot -h<OBProxy_IP> -P3306 -p****** -A oceanbase

预期结果:

  • 连接成功,可正常执行 SQL 查询。
  • 验证场景 2:完整用户名登录(兼容性测试)
# 使用完整用户名格式连接(原有方式)
mysql -uroot@obmysql#obcluster -h<OBProxy_IP> -P3306 -p****** -A oceanbase

预期结果:

  • 连接成功,新旧格式并存不影响业务。

五、操作前后对比

配置项 修改前 修改后
用户名格式要求 必须包含 @租户#集群 支持简化用户名(如 -uroot)
连接示例 -uroot@sys#obdemo63 -uroot
业务适配性 需改造应用连接字符串 兼容 MySQL 原生习惯
多租户管理 客户端需显式指定租户 通过 proxy_tenant_name 自动路由

六、注意事项

1.权限控制:确保 proxy_tenant_name 对应租户具备最小必要权限。
2.版本兼容性OBProxy ≥3.2.2 版本支持 enable_full_username 参数,低版本需升级。
3.混合部署环境若存在多集群,需通过 proxy_cluster_name 参数指定默认集群,避免路由冲突。

七、效果总结

通过调整 enable_full_username 和 proxy_tenant_name 参数:

1.简化连接方式:适配传统 MySQL 客户端,减少应用改造成本。
2.平滑迁移:支持新旧用户名格式并存,保障业务连续性。
3.租户隔离:通过代理层自动路由请求,提升多租户管理效率。

八、其他解决方案(租户+集群名称的几种写法)

由于obproxy支持OceanBase的多集群部署,因此通过obproxy访问OceanBase服务时,还需要指定集群名,三段式格式有四种:
(注意:仅Oracle模式下狭义的username不区分大小写,其它所有的字段都区分大小的,包括MySQL模式下狭义的username也是区分大小写的:ERROR 4669 (HY000): cluster not exist  可能是集群名称填错了(注意:集群名大小写也是敏感的哦!)ERROR 4012 (HY000): Get Location Cache Fail:一般都是因为租户名字写错了,或者该租户根本就不存在的!(注意:租户名大小写也是敏感的哦!)

username@tenantname#clustername,如:root@trade#xxbank
clustername:tenantname:username,如:xxbank:trade:root
clustername-tenantname-username,如:xxbank-trade-root
clustername.tenantname.username,如:xxbank.trade.root

附录:参数持久化说明
OBProxy 重启配置保留:若通过 ALTER PROXYCONFIG 修改参数,配置将自动持久化至 OBProxy 元数据库,无需额外操作。

posted @ 2026-05-11 14:23  数据库小白(专注)  阅读(67)  评论(0)    收藏  举报