Golang如何打开远程mysql连接?

问题描述 投票:14回答:2

我正在尝试使用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) 

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

mysql go
2个回答
29
投票

这些网站都非常有助于理解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()来验证它是否正常工作

2
投票

以下声明适合我:

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

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

)

© www.soinside.com 2019 - 2024. All rights reserved.