2014-05-08 79 views
11

Próbuję połączyć się ze zdalną bazą danych mysql za pomocą programu go i pakietu database/sql. Uważam, że dokumentacja go/mysql jest myląca. Wygląda na to, że nie ma jednego przykładu, jak połączyć się ze zdalnym hostem. Jak każdy użyłby localhost. Do tej pory mam tenGolang, jak otworzyć zdalne połączenie mysql?

import (
     "database/sql" 
     _ "github.com/ziutek/mymysql/godrv"  
     db, err := sql.Open("mymysql", "tcp:"+dbHost*dbName+"/"+user+"/"+pass) 
     defer db.Close() 

oparta na docs z 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 

Próbowałem też

db, err := sql.Open("mymysql", "tcp:"+dbHost, dbName+"/"+user+"/"+pass) 

i to nie działa albo. Cała składnia wydaje się być zagadkowa.

Odpowiedz

23

Te miejsca są zarówno bardzo pomocny w zrozumieniu Go SQL: https://github.com/go-sql-driver/mysql/ (nawet jeśli używasz innego sterownika) i http://go-database-sql.org/

Istnieje kilka rzeczy, które mogą pomóc:

  1. Ciąg połączenia dla sql.Open() jest w formacie DSN. db, err := sql.Open("mysql", "<username>:<pw>@tcp(<HOST>:<port>)/<dbname>") działa dla mnie dla moich połączeń. Sprawdź użycie nawiasów dla połączeń TCP.
  2. Kierowca używasz ma polecenia mysql.New() który można otworzyć połączenia z wykorzystaniem formatu już wymienione powyżej: db := mysql.New(proto, "", addr, user, pass, dbname) (patrz https://github.com/ziutek/mymysql/blob/master/examples/simple.go)
  3. Confusingly, sql.Open nie faktycznie otworzyć połączenie, to po prostu tworzy zasób db . Możesz sprawdzić, czy działa, uruchamiając: db.Ping()
+1

Używając identyfikatora URI, który zasugerowałeś, otrzymuję komunikat "Wrong database element of URI". Czy DNS jest absolutnie wymagany? To naprawdę nie ma sensu ... –

+0

DSN zwykle nie wymagają nazwy bazy danych. Sprawdziłbym, czego wymaga ta biblioteka, której używasz. Używam innej biblioteki. – dethtron5000

+0

nevermind, działa ... Używałem starej biblioteki (ziutek). Bardzo dziękuję za Twoją pomoc! –

Powiązane problemy