如何使用go-sql-driver连接到Amazon RDS

Joh*_*ohn 6 mysql go amazon-rds

我可以使用mysql -h ...命令连接到RDS实例,所以我知道它不是安全组问题.

我试过用:

sql.Open("mysql", "id:password@tcp(your-amazonaws-uri.com:3306)/dbname")
Run Code Online (Sandbox Code Playgroud)

在go-sql-driver(https://github.com/go-sql-driver/mysql)的自述文件中,但它似乎不起作用.

虽然我在RDS实例下使用我的用户名而不是id.

编辑:返回的错误是: panic runtime error: invalid memory address or nil pointer deference [signal 0xb code=0x1 addr=0x20 pc=0x5b551e] goroutine 16 [running] runtime.panic(0x7d4fc0, 0xa6ca73)...database/sql.(*Rows).Next...

它适用于我的本地数据库.

Hom*_*ani 5

sql.Open() 的连接字符串采用 DSN 格式。

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

db, err := sql.Open("mysql", "<username>:<password>@tcp(<AWSConnectionEndpoint >:<port>)/<dbname>")

if err != nil {
    fmt.Print(err.Error())
}

defer db.Close()
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 1

确保实际错误与导入问题无关(如issues 266

检查(以确保您使用的是最新版本,如本期所示):

  • 您的 Go-MySQL-Driver 版本(或 git SHA)
  • go version你的 Go 版本(在控制台中运行)

如果错误不是直接出现在“打开”步骤中,而是在访问“行”时出现,请检查以下注释

使用for循环 ( for rows.Next() { ... }) 或类似的东西:

if rows.Next() {
     // whatever
} else {
     // catch error with rows.Err()
}
rows.Close() // <- don't forget this if you are not iterating over ALL results
Run Code Online (Sandbox Code Playgroud)