Подтвердить что ты не робот

Golang как открыть удаленное соединение mysql?

Я пытаюсь подключиться к удаленной базе данных mysql, используя go и пакет database/sql. Я считаю, что документация 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) 

и он не работает. Весь синтаксис кажется загадочным.

4b9b3361

Ответ 1

Эти сайты очень полезны в понимании Go SQL: https://github.com/go-sql-driver/mysql/ (даже если вы используете другой драйвер) и http://go-database-sql.org/

Есть несколько вещей, которые могут помочь:

  • Строка подключения для sql.Open() находится в формате DSN. db, err := sql.Open("mysql", "<username>:<pw>@tcp(<HOST>:<port>)/<dbname>") работает для меня для моих подключений. Проверьте использование скобок для соединений TCP.
  • Драйвер, который вы используете, имеет команду mysql.New(), которая может открывать соединения в формате, указанном выше: db := mysql.New(proto, "", addr, user, pass, dbname) (см. https://github.com/ziutek/mymysql/blob/master/examples/simple.go)
  • Смутно, sql.Open фактически не открывает соединение, он просто создает ресурс db. Вы можете убедиться, что он работает, запустив db.Ping()

Ответ 2

Следующее выражение работает для меня:

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

db, err := sql.Open("mysql", "db_user:[email protected](localhost:3306)/my_db")

)