【发布时间】:2017-04-18 00:10:08
【问题描述】:
Love the Stack,我第一次发帖是出于完全的挫败感。谢谢你们!
- 已创建 App Engine 项目
- 在我的 App Engine 项目中创建了第二代 MySQL 实例
- 在 MySQL 实例中创建数据库
- 在 App Engine 中,我激活了 --> Google Cloud Shell
我已经复制了这个基本的 GO 程序来连接我的 MySQL 实例。
我构建并运行它。 去构建 mysqlexample.go ./mysql示例
我无法成功连接。您可以看到我尝试过的所有各种连接字符串,它们的右侧是我得到的响应。
我可以使用 mysql admin 从本地 Windows 机器进行连接。
帮助?
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
)
func main() {
const dbIP = "104.xxx.xx.x"
const dbInstanceName = "esp-1-dev:us-central1:espdev"
const dbName = "servpro"
const dbUserName = "root"
const dbPassword = "xxxxxxx"
const dbOpenString = dbUserName + ":" + dbPassword + "@/" + dbInstanceName + "/" + dbName //GETS RESPONSE default addr for network 'AppEngine:Zone:Project' unknown
//const dbOpenString = dbUserName + "@cloudsql(" + dbInstanceName + ")/" + dbName //GETS RESPONSE dial cloudsql: unknown network cloudsql
//const dbOpenString = dbUserName + "@/" //+ "?parseTime=true&loc=UTC" //GETS RESPONSE getsockopt: connection refused
//const dbOpenString = dbUserName + ":" + dbPassword + "@tcp(" + dbIP + ":3306)/" + dbName //GETS RESPONSE dial tcp 104.xxx.xxx.x:3306: getsockopt: connection timed out
// Got this from stack overflow. GoDocs are not updated to reflect 2nd Gen databases.
// http://stackoverflow.com/questions/38890022/tls-requested-but-server-does-not-support-tls-error-with-google-cloud-sql-2nd
//user:password@cloudsql(copiedPastedInstanceConnectionName)/databaseName?charset=charset&collation=collation&tls=tlsConfigName&parseTime=true
//First Generation Connection String
//username:password@cloudsql(appID:CloudSQLInstance)/databasename?parseTime=true&loc=UTC
db, err := sql.Open("mysql", dbOpenString);
defer db.Close()
log.Println("Attempting Ping of database....")
err = db.Ping()
if err != nil {
log.Println("db.Ping() failed: " + dbOpenString)
log.Println(err)
} else {
log.Println("Success!")
}
}
【问题讨论】:
-
您没有说您是从 App Engine Standard 还是 App Engine Flex 进行连接。我怀疑您是从 App Engine Flex 连接的,但正在阅读 App Engine 标准文档/帖子。请确认。
-
我在 Google Cloud Shell 中工作。制作程序,构建它,运行它。在部署解决方案并将其添加到 yaml 之前,我还没有使用 Flex 的选项。在处理所有 GO 示例时,我一直在做这个云 shell 环境。现在我想和云 sql 交谈并被卡住。我想现在我正在与谷歌云壳作斗争。今晚我将部署我的应用程序并打开 flex 并发布结果。下面的连接字符串在 cloud shell 中不起作用,但至少 flex 连接字符串给了我一条新消息……没有这样的文件目录
-
您应该在帖子中更清楚地说明这一点。在这种情况下,您应该不遵循 App Engine 说明,因为它们是从 App Engine 连接的。从 Cloud Shell 连接有点复杂,您需要在 shell 中下载并运行 Cloud SQL 代理才能连接(使用我从 App Engine Flex 发布的相同连接字符串)
标签: google-app-engine go google-cloud-sql