web-dev-qa-db-ja.com

Golangリモートのmysql接続を開く方法は?

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) 

そしてそれも機能していません。構文全体は不可解なようです。

15

これらのサイトはどちらも、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リソースを作成するだけです。 db.Ping()を実行して、機能していることを確認できます
30
dethtron5000

次の文は私のために働きます:

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

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

3
user2712873