亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Golang API 遠程訪問 OVH SQL 數據庫

從 Golang API 遠程訪問 OVH SQL 數據庫

Go
肥皂起泡泡 2021-12-20 15:48:09
我正在制作一個 Golang API,以便能夠與我的 Android 應用程序中的 SQL 數據庫進行交互。我遇到的問題如下:我在https://phpmyadmin.ovh.net/ 上托管了一個 sql 數據庫我正在嘗試將我的語言環境 API 連接到這個 API。根據文檔:func Open(driverName, dataSourceName string) (*DB, error)driverName 參數將是“mysql”,不是嗎?但是,dataSourceName參數是什么?我看到很多關于 Open 的帖子,但是,我認為我不明白如何組織有關 dataSourceName 參數的 url 字符串。package mainimport (    "net/http"    "database/sql"    "fmt")var db *sql.DB // global variable to share it between main and the HTTP handlerfunc main() {fmt.Println("starting up")db, err := sql.Open("mysql", "????????????")if err != nil {    fmt.Println("Error on initializing database connection: %s", err.Error())}err = db.Ping()if err != nil {    fmt.Println("Error on opening database connection: %s", err.Error())}http.HandleFunc("/", hello)http.ListenAndServe(":8080", nil)}感謝閱讀和幫助!/!\ 編輯 /!\所以,在你的兩個答案之后,我嘗試了下面的代碼:package mainimport ("fmt""net/http""database/sql"_ "github.com/go-sql-driver/mysql")type databaseinfos struct {user stringpassword stringname stringaddress stringport stringurl string}var db *sql.DB // global variable to share it between main and the HTTP handlervar dbi *databaseinfosfunc main() {dbi := databaseinfos{    user: "Emixam23",    password: "",    name: "mydb",    address: "127.0.0.1",    port: "3306",    url: ""}dbi.url = (dbi.user + ":" + dbi.password + "@tcp(" + dbi.address + ":" + dbi.port + ")/" + dbi.name)fmt.Println(dbi.url)db, err := sql.Open("mysql", dbi.url)if err != nil {    fmt.Println("Error on initializing database connection: %s", err.Error())}err = db.Ping()if err != nil {    fmt.Println("Error on opening database connection: %s", err.Error())}/*http.HandleFunc("/", hello)*/http.ListenAndServe(":8080", nil)}但是,我收到一個錯誤,即“打開數據庫連接時出錯:%s dial tcp 127.0.0.1:3306: connectex: 由于目標機器主動拒絕,無法建立連接?!?。問題是因為我的電腦還是因為dataSourceName參數?
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

dataSourceName應以 DSN 格式提供:

<username>:<password>@tcp(<host>:<port>)/<database>

例如:

db, err := sql.Open("mysql", "myuser:password@tcp(127.0.0.1:3306)/mydb")


查看完整回答
反對 回復 2021-12-20
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

你的代碼有問題,在這里:

dbi.url = (dbi.user + ":" + dbi.password + "@tcp(...

這種使用我上面看到的參數構建連接字符串的方法將導致:

Emixam23:@tcp...

使用空密碼,如果我們查看規范,這是錯誤的:

[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]

我們看到,如果不需要密碼,則不得添加“:”

如果問題仍然存在并且連接字符串實際上與正確的模式匹配,請測試您是否可以訪問您的數據庫:

mysql -u Emixam23

或密碼:

mysql -u Emixam23 -p

然后嘗試訪問數據庫以查看您的用戶是否具有適當的權限:

> USE mydb; SELECT 1;

如果您甚至無法連接:

檢查您的端口和 IP 綁定是否正確:

sudo netstat -antp | grep mysql

如果沒有,請/etc/mysql/my.cnf相應地編輯您的。


查看完整回答
反對 回復 2021-12-20
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號