TiDB Cloud ServerlessはMySQL5.7互換のNew SQL DBです。
Goのmysql-driverから接続したときにTLS設定で怒られたのでメモ。
Error 1105: Connections using insecure transport are prohibited. See https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters
mysql.Config
にParams map[string]string
が生えてるはずなので、そこに "tls" : "true"
を適切に渡す必要がある。
うちだとラッパー書いてるのでこんな感じ
func createDao(conf config.Database) DB {
mysqlConf := mysql.Config{
User: conf.User,
Passwd: conf.Password,
Net: conf.Net,
Addr: conf.Addr,
DBName: conf.DBName,
ParseTime: true,
Loc: conf.Location.GetTimeLocation(),
AllowNativePasswords: true,
Params: conf.Params, //++
}
dsn := mysqlConf.FormatDSN()
gormDB, err := gorm.Open(conf.Dialect, dsn)
if err != nil {
log.Error(err)
log.Panicf("DB connection failed. (%s)", conf.Name)
}
log.Debugf("DB connected. (%s)", conf.Name)
c := []config.Database{
{
Name: "tidb-serverless",
Dialect: "mysql",
Role: "master",
Addr: fmt.Sprintf("%s:%s", conf.SecretEnv.DBHost, conf.SecretEnv.DBPort),
DBName: conf.SecretEnv.DBName,
User: conf.SecretEnv.DBUser,
Password: conf.SecretEnv.DBPassword,
Net: `tcp`,
Location: "UTC",
MaxConnections: 10,
MaxIdleConnections: 10,
ConnectionMaxLifeTime: 120,
Logging: false,
Params: map[string]string{
"tls": "true",
},
},
}
ローカルPCのmysql clientやSequelからは普通につながっていたのでちょっとハマったが、TLS設定をクライアント側がいい感じにやっていてくれたんだろう。