我正在使用go on App Engine中的GO-SQL-DRIVER/MYSQL驱动程序来连接到这样的云SQL实例:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
db, dbErr := sql.Open("mysql", "root@cloudsql(project:instance)/database"
...
pingErr := db.Ping()
,但我得到了" 权限拒绝" pingErr
。
当然,我检查了我的应用程序在"访问控制"下的云SQL控制台中授权。我还尝试添加具有特权的MySQL用户并使用user:password
代替root
,甚至没有指定用户。
我在做什么错?
...
更新:
per @kyle的建议我尝试了替代驱动程序ziutek/mymysql,它可以与以下代码一起使用:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
_ "github.com/ziutek/mymysql/mysql"
_ "github.com/ziutek/mymysql/native"
)
db, dbErr := sql.Open("mymysql", "cloudsql:project:instance*database/user/password"
猜猜是时候在go-sql-driver/mysql上提出拉动请求了,如果我能弄清楚怎么了!任何见解或经验都值得赞赏!
它是版本化问题!
如果您仔细查看,则将App Engine支持添加到主分支,但最新版本为1.1,不包括它。
而不是go get github.com/go-sql-driver/mysql
,您需要手动git clone https://github.com/go-sql-driver/mysql
(主分支)到$GOPATH/src/
和然后部署到App Engine!
作者的这一评论是让我失望的原因, @Kyle的建议尝试另一个驱动程序(有效)激励我再次阅读所有内容 - 谢谢!
您给sql.Open
的DSN(数据源名称)看起来不像文档中的一个:
import "database/sql"
import _ "<some mysql package>"
db, err := sql.Open("mysql", "cloudsql:my-instance*dbname/user/passwd")
来源:Go Appengine Cloud SQL参考
编辑:看起来您正在使用此处记录的SQL软件包使用正确的DSN格式。我那时我的猜测是它正确连接到数据库,但是要么没有被接受,要么出于任何原因而没有正确的权限。