You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go应用通过私有IP连接CloudSQL-MySQL遇认证错误求助

问题分析:Go应用连接CloudSQL-MySQL出现caching_sha2_password认证错误

问题场景

尝试通过私有IP将Go应用连接到CloudSQL-MySQL,代码如下:

package main

import (
    "context"
    "database/sql"
    "fmt"
    "log"
    "net"
    "sync"

    "cloud.google.com/go/cloudsqlconn"
    "github.com/go-sql-driver/mysql"
)

const instanceURI = "%s:%s:%s"

func main(){
    instance := fmt.Sprintf(instanceURI, db.Project, db.GCRegion, db.Instance)
    d, err := cloudsqlconn.NewDialer(context.Background(), cloudsqlconn.WithOptions(cloudsqlconn.WithCredentialsJSON(db.ServiceAccount)))
    if err != nil {
        log.Println(err)
    }
    mysql.RegisterDialContext("cloudsqlconn",
        func(ctx context.Context, addr string) (net.Conn, error) {
            return d.Dial(ctx, instance, cloudsqlconn.WithPrivateIP())
        })
    dbURI := fmt.Sprintf("%s:%s@cloudsqlconn(%s)/%s?parseTime=true",
        db.User, db.Password, instance, db.DbName)
    dbPool, err := sql.Open("mysql", dbURI)
    if err != nil {
        log.Println(err.Error())
        
    }
    err = dbPool.PingContext(context.Background())
    if err != nil {
        log.Printf("Errors %s pinging DB", err)
    }

}

运行时触发错误:
unexpect resp from server for caching_sha2_password perform full authentication

错误原因及解决办法

核心原因

该错误源于MySQL认证插件不兼容:CloudSQL MySQL实例默认采用caching_sha2_password作为用户认证插件,但当前使用的Go MySQL驱动(github.com/go-sql-driver/mysql)在未正确配置的情况下,无法处理该认证方式的完整流程。

解决措施

  • 调整数据库用户认证插件
    登录CloudSQL控制台,进入目标MySQL实例的「用户」管理页面,将连接所用的db.User对应的认证插件修改为mysql_native_password,该插件兼容性更强,适配多数旧版本驱动场景。

  • 升级Go MySQL驱动版本
    确保使用的github.com/go-sql-driver/mysql为最新版本,新版本已原生支持caching_sha2_password认证,需执行依赖更新操作确保版本生效。

  • 修改连接字符串参数
    在连接URI中添加allowNativePasswords=true参数,强制驱动优先使用原生密码认证逻辑,示例如下:

    dbURI := fmt.Sprintf("%s:%s@cloudsqlconn(%s)/%s?parseTime=true&allowNativePasswords=true",
        db.User, db.Password, instance, db.DbName)
    

    若实例要求加密连接,需正确配置TLS参数(如指定自定义证书),避免因TLS配置缺失导致认证流程中断。

  • 验证私有IP网络连通性
    确认Go应用所在环境(如GKE、Compute Engine)与CloudSQL实例处于同一VPC网络,或已配置VPC peering;同时检查CloudSQL实例是否已启用私有服务访问,确保私有IP可正常访问。

内容的提问来源于stack exchange,提问作者Ritika Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:05:34