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

7

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

我尝试使用:

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

在go-sql-driver的readme文件中(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... 我的本地数据库可以正常工作。

应该返回一个错误,请将其发布。 - OneOfOne
问题解决了吗?我需要帮助。 - prabhudas
2个回答

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

1

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

检查以下内容,确保您使用的是最新版本(例如 此问题):

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

如果错误不是直接在打开步骤中出现,而是在访问“Rows”时,请查看此评论

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

我已经仔细阅读了您提到的所有内容。我的本地MySQL实例可以完美地运行我的操作。本地和RDS两个数据库实例之间唯一的区别就是MySQL版本。您认为这可能是一个可能的原因吗? - John
@UserNotDefined 是的,这可能导致沟通不畅。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接