2014-05-08 86 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)。非常感謝你的幫助! –