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

时间:2014-09-23 16:03:01

标签: mysql go amazon-rds

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

我试图使用:

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

在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...

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

2 个答案:

答案 0 :(得分:1)

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

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

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

如果错误不是直接在“打开”步骤中,而是在访问“行”时check this comment out

  

使用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

答案 1 :(得分:0)

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()