2014-05-08 14 views
11

Sto provando a connettermi al database mysql remoto usando go e il pacchetto database/sql. Trovo che la documentazione di go/mysql sia confusa. Sembra che non ci sia un singolo esempio su come connettersi a un host remoto. Come tutti userebbero localhost. Finora ho questoGolang come aprire una connessione mysql remota?

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

Sulla base dei documenti da 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 

Ho anche provato

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

e non sta funzionando neanche. L'intera sintassi sembra criptica.

risposta

23

Questi siti sono entrambi molto utili per comprendere Go SQL: https://github.com/go-sql-driver/mysql/ (anche se si utilizza un driver diverso) e http://go-database-sql.org/

Ci sono alcune cose che potrebbero aiutare:

  1. La stringa di connessione per sql.Open() è in formato DSN. db, err := sql.Open("mysql", "<username>:<pw>@tcp(<HOST>:<port>)/<dbname>") funziona per me per le mie connessioni. Verifica l'uso delle parentesi per le connessioni TCP.
  2. Il driver in uso ha il comando mysql.New() che può aprire le connessioni utilizzando il formato che hai elencato sopra: db := mysql.New(proto, "", addr, user, pass, dbname) (vedi https://github.com/ziutek/mymysql/blob/master/examples/simple.go)
  3. Confusamente, sql.Open in realtà non aprire una connessione, si crea solo una risorsa db . Puoi verificare che funzioni funzionando db.Ping()
+1

Utilizzando l'URI che hai suggerito, visualizzo "Parte del database errato dell'URI". DNS è assolutamente necessario? Non ha davvero senso ... –

+0

I DSN di solito non richiedono un nome DB. Verificerei per vedere cosa richiede quella libreria che stai usando. Ho usato una libreria diversa. – dethtron5000

+0

non importa, sta funzionando ... Stavo usando il vecchio lib (ziutek). Grazie mille per il vostro aiuto! –

Problemi correlati