2014-05-08 15 views
11

Tôi đang cố gắng kết nối với cơ sở dữ liệu mysql từ xa bằng cách sử dụng go và gói cơ sở dữ liệu/sql. Tôi tìm thấy tài liệu go/mysql gây nhầm lẫn. Có vẻ như không có ví dụ duy nhất làm thế nào để kết nối với một máy chủ từ xa. Giống như mọi người sẽ sử dụng localhost. Cho đến nay tôi có điều nàyGolang cách mở kết nối mysql từ xa?

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

Dựa trên các tài liệu từ 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 

Tôi cũng đã cố gắng

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

và nó không làm việc một trong hai. Toàn bộ cú pháp có vẻ khó hiểu.

Trả lời

23

Những trang web này đều là thực sự hữu ích trong việc tìm hiểu Go SQL: https://github.com/go-sql-driver/mysql/ (ngay cả khi bạn đang sử dụng một trình điều khiển khác nhau) và http://go-database-sql.org/

Có một vài điều mà có thể giúp đỡ:

  1. Chuỗi kết nối cho sql.Open() có định dạng DSN. db, err := sql.Open("mysql", "<username>:<pw>@tcp(<HOST>:<port>)/<dbname>") hoạt động cho tôi đối với các kết nối của tôi. Kiểm tra việc sử dụng dấu ngoặc đơn cho các kết nối TCP.
  2. Người lái xe bạn đang sử dụng có lệnh mysql.New() mà có thể mở các kết nối bằng cách sử dụng định dạng mà bạn đã liệt kê ở trên: db := mysql.New(proto, "", addr, user, pass, dbname) (xem https://github.com/ziutek/mymysql/blob/master/examples/simple.go)
  3. gây nhầm lẫn, sql.Open không thực sự mở một kết nối, nó chỉ tạo ra một nguồn lực db . Bạn có thể xác minh rằng nó hoạt động bằng cách chạy db.Ping()
+1

Sử dụng URI mà bạn đề xuất tôi nhận được "Phần cơ sở dữ liệu sai của URI". DNS có bắt buộc hoàn toàn không? Không thực sự hợp lý ... –

+0

DSN thường không yêu cầu tên DB. Tôi muốn kiểm tra xem bạn đang sử dụng thư viện nào. Tôi đã sử dụng một thư viện khác. – dethtron5000

+0

nevermind, nó đang hoạt động ... Tôi đã sử dụng lib cũ (ziutek). Cảm ơn sự giúp đỡ của bạn! –

Các vấn đề liên quan