从 Golang API 远程访问 OVH SQL 数据库

我正在制作一个 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 main


import (

    "net/http"

    "database/sql"

    "fmt"

)


var db *sql.DB // global variable to share it between main and the HTTP handler


func 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 main


import (

"fmt"

"net/http"

"database/sql"

_ "github.com/go-sql-driver/mysql"

)


type databaseinfos struct {

user string

password string

name string

address string

port string

url string

}


var db *sql.DB // global variable to share it between main and the HTTP handler

var dbi *databaseinfos


func 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参数?


肥皂起泡泡
浏览 176回答 2
2回答

智慧大石

dataSourceName应以 DSN 格式提供:<username>:<password>@tcp(<host>:<port>)/<database>例如:db,&nbsp;err&nbsp;:=&nbsp;sql.Open("mysql",&nbsp;"myuser:password@tcp(127.0.0.1:3306)/mydb")

桃花长相依

你的代码有问题,在这里:dbi.url&nbsp;=&nbsp;(dbi.user&nbsp;+&nbsp;":"&nbsp;+&nbsp;dbi.password&nbsp;+&nbsp;"@tcp(...这种使用我上面看到的参数构建连接字符串的方法将导致:Emixam23:@tcp...使用空密码,如果我们查看规范,这是错误的:[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]我们看到,如果不需要密码,则不得添加“:”如果问题仍然存在并且连接字符串实际上与正确的模式匹配,请测试您是否可以访问您的数据库:mysql&nbsp;-u&nbsp;Emixam23或密码:mysql&nbsp;-u&nbsp;Emixam23&nbsp;-p然后尝试访问数据库以查看您的用户是否具有适当的权限:>&nbsp;USE&nbsp;mydb;&nbsp;SELECT&nbsp;1;如果您甚至无法连接:检查您的端口和 IP 绑定是否正确:sudo&nbsp;netstat&nbsp;-antp&nbsp;|&nbsp;grep&nbsp;mysql如果没有,请/etc/mysql/my.cnf相应地编辑您的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go