【问题标题】:How to open a remote mysql connection?如何打开远程mysql连接?
【发布时间】:2014-06-26 08:35:18
【问题描述】:

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

   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


    【解决方案1】:

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

    【讨论】:

    • 使用您建议的 URI,我得到“URI 的数据库部分错误”。绝对需要 DNS 吗?真的没有意义...
    • DSN 通常不需要数据库名称。我会检查你正在使用的那个库需要什么。我一直在使用不同的库。
    • 没关系,它正在工作......我使用的是旧的库( ziutek )。非常感谢您的帮助!
    • zuitek 链接是404
    【解决方案2】:

    以下陈述对我有用:

    import (
        "database/sql"
        _ "github.com/go-sql-driver/mysql"
    )
    
    db, err := sql.Open("mysql", "db_user:password@tcp(localhost:3306)/my_db")
    

    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      相关资源
      最近更新 更多