【问题标题】:socket: operation not permitted when connecting to cloudsql套接字:连接到 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 都在同一个项目中。有人对我缺少什么有任何见解吗?

【问题讨论】:

    标签: postgresql sockets google-app-engine go google-cloud-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(&lt;your instance&gt;)"

      【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2020-06-07
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多