从App Engine(第二代CloudSQL)连接到CloudSQL GO

Cor*_*ton 0 google-app-engine go google-cloud-sql

爱堆栈,我完全沮丧的第一篇文章.谢谢你的评论!

  • 创建了App Engine项目
  • 在我的App Engine项目中创建了第二代MySQL实例
  • 在MySQL实例中创建数据库
  • 在App Engine中,我激活 - > Google Cloud Shell < - .(我在console.cloud.google.com的命令提示符下工作)

我已经复制了这个基本的GO程序来连接我的MySQL实例.

我构建并运行它.去构建mysqlexample.go ./mysqlexample

我无法实现成功的连接.您可以看到我尝试过的所有各种连接字符串,右边是我得到的响应.

我可以使用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)/d??atabaseName?charset=??charset&collation=co??llation&tls=tlsConfi??gName&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!")
    }

}
Run Code Online (Sandbox Code Playgroud)

Vad*_*dim 11

以下是正确的连接字符串,但它们根据您连接的App Engine版本而有所不同.

App Engine标准:

user:password@cloudsql(INSTANCE_CONNECTION_NAME)/dbname
Run Code Online (Sandbox Code Playgroud)

App Engine灵活:

user:password@unix(/cloudsql/INSTANCE_CONNECTION_NAME)/dbname
Run Code Online (Sandbox Code Playgroud)


Ati*_*ish 5

如果您要迁移到第二代 Go App Engine (Golang 1.11),请将连接字符串从:

user:password@cloudsql(instanceID)/db

user:password@unix(/cloudsql/instanceID)/db