Golang如何打开远程mysql连接?

时间:2014-05-08 19:05:04

标签: mysql go

我尝试使用go和database / sql包连接到远程mysql数据库。 我发现go / mysql文档令人困惑。似乎没有一个例子如何连接到远程主机。像每个人都会使用localhost。 到目前为止我有这个

   import (
        "database/sql"
        _ "github.com/ziutek/mymysql/godrv"    
        db, err := sql.Open("mymysql", "tcp:"+dbHost*dbName+"/"+user+"/"+pass)
        defer db.Close()

基于https://github.com/ziutek/mymysql

的文档
[PROTOCOL_SPECFIIC*]DBNAME/USER/PASSWD
//
// where protocol specific part may be empty (this means connection to
// local server using default protocol). Currently possible forms:
//   DBNAME/USER/PASSWD
//   unix:SOCKPATH*DBNAME/USER/PASSWD
//   unix:SOCKPATH,OPTIONS*DBNAME/USER/PASSWD
//   tcp:ADDR*DBNAME/USER/PASSWD
//   tcp:ADDR,OPTIONS*DBNAME/USER/PASSWD

我也试过

 db, err := sql.Open("mymysql", "tcp:"+dbHost, dbName+"/"+user+"/"+pass) 

它也没有用。整个语法看起来很神秘。

2 个答案:

答案 0 :(得分:28)

这些网站对于理解Go SQL非常有帮助:https://github.com/go-sql-driver/mysql/(即使您使用的是其他驱动程序)和http://go-database-sql.org/

有一些事情可能会有所帮助:

  1. sql.Open()的连接字符串为DSN格式。 db, err := sql.Open("mysql", "<username>:<pw>@tcp(<HOST>:<port>)/<dbname>")适用于我的联系。检查使用括号进行TCP连接。
  2. 您使用的驱动程序具有mysql.New()命令,该命令可以使用您在上面列出的格式打开连接:db := mysql.New(proto, "", addr, user, pass, dbname)
  3. 令人困惑的是,sql.Open实际上并没有打开连接,只是创建了一个数据库资源。您可以通过运行db.Ping()
  4. 来验证其是否有效

答案 1 :(得分:2)

以下声明适用于我:

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

db, err := sql.Open("mysql", "db_user:password@tcp(localhost:3306)/my_db")