【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】企业版5.7.25mysql模式 oceanbase-3.2.3.3
【问题描述】gorm如何连接用户名@租户名#集群这种用户名形式的ob
package main
import (
“fmt”
“gorm.io/driver/mysql”
“gorm.io/gorm”
)
func main() {
// 设置正确的连接字符串
dsn := “root@RGZN_YY#bankxctest:10001:aaAA11__@tcp(127.0.0.1:2883)/droidme?charset=utf8mb4&parseTime=True&loc=Local”
// 使用 GORM 连接数据库
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 输出连接是否成功
fmt.Println("Database connection successful:", db)
}
皇甫侯
#3
dsn := “root@RGZN_YY#bankxctest:aaAA11__@tcp(127.0.0.1:2883)/droidme?charset=utf8mb4&parseTime=True&loc=Local”
这样试试应该可以,官网上有参考的文档但是没有用obproxy而已
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013658
淇铭
#4
我上面的代码应该和官方一致,连接的时候会报错1045 感觉是用户名的@和#导致的
咖啡哥
#7
用户名部分换成:bankxctest.RGZN_YY.root
集群名称、租户名、用户名之间用. 或: 试试
集群名称.租户名.用户名
集群名称: 租户名: 用户名
皇甫侯
#10
嗯,可以先按照上面两位老师说的试试,或者按照文档里面写的,用直连OB的方式看下能不能通。。
dsn连接串的问题,测试下来
mysql原生驱动时支持的 GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package v1.8.1
dsn默认解析规则时 反向查找最后一个/
然后定位@
然后取第一个:
保证dsn可以正常解析。
第三方库goframe Link模式不支持linkPattern用户字段不支持特殊字段,无法进行匹配,但是可以通过confignode来显示配置;访问时OK的。
gorm 版本
require (
GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package v1.7.0
gorm.io/driver/mysql v1.5.7
gorm.io/gorm v1.25.12
)
测试确实不通过,没有环境debug放弃了。。。
追踪看下来不是连接验证的问题,直接暴栈了