Mysql 使用云SQL在Google应用程序引擎上航行

Mysql 使用云SQL在Google应用程序引擎上航行,mysql,node.js,google-app-engine,sails.js,google-cloud-sql,Mysql,Node.js,Google App Engine,Sails.js,Google Cloud Sql,我遵循了这个指南 关于如何将Sails部署到googleappengine。 然而,我的应用程序使用MySQL作为数据库,我在“connection.js”中进行了如下设置 我在尝试连接云SQL时(当我请求登录数据库时)遇到的错误是: 我设置正确了吗?对于那些寻求使用带Sails.js的Google App Engine连接到Google Cloud SQL的解决方案的人,我已经找到了答案 使用主机地址连接到Google Cloud SQL在这里不起作用,因为防火墙规则和云SQL的访问控制将阻止

我遵循了这个指南 关于如何将Sails部署到googleappengine。 然而,我的应用程序使用MySQL作为数据库,我在“connection.js”中进行了如下设置

我在尝试连接云SQL时(当我请求登录数据库时)遇到的错误是:


我设置正确了吗?

对于那些寻求使用带Sails.js的Google App Engine连接到Google Cloud SQL的解决方案的人,我已经找到了答案

使用主机地址连接到Google Cloud SQL在这里不起作用,因为防火墙规则和云SQL的访问控制将阻止这种与白名单地址的连接。不幸的是,无法为Google App Engine分配静态IP地址。因此,应用程序引擎不能被云SQL列入白名单,或者您需要将0.0.0.0/0列入白名单,这就是一切,而且不安全

解决方案是在connection.js中使用此配置

mysql: {
      adapter: 'sails-mysql',
      host: '104.199.196.99', // Internal IP Address of the Cloud SQL Instance
      user: 'root', 
      password: 'xxxxxx', 
      database: 'xxxxxxxx' 
    }
googleCloudSQL: {
   adapter: 'sails-mysql',
   socketPath: '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME,
   user: 'XXXXX',
   password: 'XXXXXXX',
   database: 'XXXXXXXX'
}

通过使用云SQL的实例连接名称通过套接字路径连接到云SQL,这是实现此操作的本机方法。如果你的应用引擎已经与你的云SQL在同一个项目中,那么它将被授权连接。但是,如果他们在不同的项目中,您需要设置服务帐户和IAM。

请告诉我,云SQL是否在默认端口(3306)上运行?否则它将无法连接,因为您没有在connections.js文件中提到端口?我尝试将端口指定为3306,但没有成功。在Google Cloud Shell中,我尝试了“telnet 3306”,但联系不到它。相反,可以通过端口3307访问云SQL实例。我尝试在connection.js文件中指定这两个端口,但仍然没有结果。我有另一个计算引擎实例,它有连接到云SQL的权限(我为它分配了静态IP地址),一个不带端口的简单命令“mysql--host=--user=root--password”可以连接。此外,云SQL有允许此项目中的每个应用程序连接的权限。你已经将两个端口都放好了吗?我不明白。您是否使用过mysql:{adapter:'sails mysql',host:'104.199.196.99',//云SQL实例用户的内部IP地址:'root',密码:'xxxxxx',数据库:'xxxxxxxx'端口:3007}我尝试过这个解决方案,但仍然无法从我的应用程序引擎项目连接到mysql
googleCloudSQL: {
   adapter: 'sails-mysql',
   socketPath: '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME,
   user: 'XXXXX',
   password: 'XXXXXXX',
   database: 'XXXXXXXX'
}