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)
и он не работает. Весь синтаксис кажется загадочным.
Ответы
Ответ 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")
)