【发布时间】:2017-02-22 13:33:16
【问题描述】:
我在这里看到过同样问题的其他帖子,但是没有一个答案对我有帮助。我有一个谷歌 SQLCloud 第二代数据库,我正试图让我的 Go Appengine 应用程序建立一个连接。 我正在使用go-sql-driver/mysql
起初我尝试使用与第一代相同的方式进行连接,只是将项目和实例名称作为参数传递:
sql.Open("mysql", "root@cloudsql(project:instance)/database"
然后我从 Cloud Console 和 this post 注意到该区域也是必需的,因此我的连接参数现在如下所示:
sql.Open("mysql", "root@cloudsql(project:uscentral1:instance)/database"
还有密码
sql.Open("mysql", "root:password@cloudsql(project:uscentral1:instance)/database"
还是不行
我最后一次尝试是使用驱动程序文档中提供的代码,如this post 所述,使用 SSL 进行连接:
rootCertPool := x509.NewCertPool()
pem, err := ioutil.ReadFile("/path/ca-cert.pem")
if err != nil {
log.Fatal(err)
}
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
clientCert := make([]tls.Certificate, 0, 1)
certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem")
if err != nil {
log.Fatal(err)
}
clientCert = append(clientCert, certs)
mysql.RegisterTLSConfig("custom", &tls.Config{
RootCAs: rootCertPool,
Certificates: clientCert,
})
sql.Open("mysql","root:password@cloudsql(project:uscentral1:instance)/database?tls=custom")
也没有运气。
在这一点上,我只是想不出问题可能是什么。有没有人为了让它发挥作用而做了与大多数人所做的不同的事情?在这一点上,我不确定问题出在我的代码、驱动程序还是 CloudSQL 数据库中的某些配置上。
【问题讨论】:
标签: google-app-engine go google-cloud-sql