2014-05-08 88 views
11

我正尝试使用go和数据库/ sql包连接到远程mysql数据库。 我发现go/mysql文档令人困惑。看起来没有一个例子是如何连接到远程主机的。就像每个人都会使用localhost一样。 到目前为止,我有这个Golang如何打开远程mysql连接?

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

基础上的文档从​​

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

和它不工作要么。整个语法看起来很神秘。

回答

23

这些网站了解围棋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)(见https://github.com/ziutek/mymysql/blob/master/examples/simple.go
  3. 令人困惑的是,sql.Open实际上并没有打开连接,它只是创建了一个数据库资源。您可以通过运行验证它是否正在工作db.Ping()
+1

使用您建议的URI会得到“URI的错误数据库部分”。 DNS绝对需要?没有意义... –

+0

DSN通常不需要数据库名称。我会检查一下你正在使用的库。我一直在使用不同的库。 – dethtron5000

+0

没关系,它正在工作......我正在使用旧的lib(ziutek)。非常感谢你的帮助! –