套接字:连接到 cloudsql 时不允许操作
Posted
技术标签:
【中文标题】套接字:连接到 cloudsql 时不允许操作【英文标题】:socket: operation not permitted when connecting to cloudsql 【发布时间】:2017-12-05 10:14:30 【问题描述】:尝试使用以下设置进行连接时,我在应用引擎上收到 socket:operation not permitted
错误,但在使用 cloud-sql-proxy 时却没有。以下代码在本地工作,但不适用于应用引擎:
connString = "user=USER_NAME password=PASSWORD host=/cloudsql/INSTANCE_NAME dbname=DB_NAME"
DBCon, err2 = sql.Open("postgres", connString)
应用引擎和云 sql 都在同一个项目中。有人对我缺少什么有任何见解吗?
【问题讨论】:
【参考方案1】:很遗憾,AppEngine 标准尚不支持 Cloud SQL+postgres:
“注意:不支持从 App Engine 标准环境应用程序连接到 PostgreSQL 实例”
https://cloud.google.com/sql/docs/postgres/connect-app-engine
【讨论】:
我认为现在是允许的。【参考方案2】:NOTE: This is for mysql second version db
main.go
import (
_ "github.com/go-sql-driver/mysql",
"database/sql"
)
func InitDB() (err error, db *DB)
db, err = sql.Open("mysql", os.Getenv("SQL_STRING"))
SQL_STRING: 'username:password@cloudsql(project:region:instance_id)/db'
更多参考https://cloud.google.com/appengine/docs/standard/go/cloud-sql/reference
【讨论】:
【参考方案3】:我的 App Engine 项目使用 MySQL,但理论上连接应该是相同的。这是我的连接方式。如果这不适用于 Postgres,请告诉我
编辑第二代实例
connString:= "@unix(/cloudsql/<your instance>)"
if appengine.IsDevAppServer()
connString = "@tcp(<instance ip>:port)"
sqlUser := "<your user>"
sqlPass := "<your pass>"
connString = sqlUser + ":" + sqlPass + connString
// connect main db
db, err := sqlx.Connect("mysql", connString)
if err != nil
return nil, err
第一代的旧字符串:
connString := "@cloudsql(<your instance>)"
【讨论】:
应用引擎标准似乎说要为 postgres 使用套接字 cloud.google.com/sql/docs/postgres/connect-app-engine 对于他们不久前发布的第二代实例,连接字符串是不同的。现在是“@unix(/cloudsql/以上是关于套接字:连接到 cloudsql 时不允许操作的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 unix 套接字从托管在不同 GCP 项目中的 App Engine 柔性环境连接到 Cloud SQL
Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)