为了账号安全,请及时绑定邮箱和手机立即绑定

从 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 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号