首页 > 解决方案 > nodeJS 应用程序无法连接到谷歌 MySQL 数据实例

问题描述

我在付费帐户下的谷歌控制台中托管了一个 nodeJS 应用程序。当我尝试将我的 nodeJS 应用程序连接到 localhost 服务器中的 MySQL db 时,它正在工作,但是一旦我将其配置为在谷歌云控制台中工作,它就会说无法连接到数据库。我成功创建了一个谷歌 SQL 实例,并确定了用户名和密码,因为我可以通过云控制台连接到数据库。我参考了互联网上的许多教程,但无法找到方法....

 var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '1234',
    database: 'test'
  }); 


  con.connect(function(error){
    if(error){
      console.log('error');
    }
    else{
      console.log('connected');
    }
  });

标签: mysqlnode.jsgoogle-app-enginegoogle-cloud-platformgoogle-cloud-console

解决方案


由于此问题带有 标记google-app-engine,因此我假设它是您用于部署应用程序的产品。在这种情况下:

App Engine 使用 Unix 套接字连接到 Cloud SQL 实例,因此您需要传递实例的连接名称,如下例所示:

var con = mysql.createConnection({
  host: "localhost",
  socketPath: "/cloudsql/<PROJECT_ID>:<REGION>:<SQL_INSTANCE_NAME>",
  user: "root",
  password: "secret"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

您实际上可以通过在本地运行 cloud_sql_proxy 并通过 unix 套接字连接来测试它。使用Cloud SQL for MySQL教程介绍了如何执行此操作。

编辑:

如果您使用的是 App Engine Flex,在您的app.yaml上设置正确的 beta_settings 也很重要,如下例所示:

beta_settings:
  # The connection name of your instance, available by using
  # 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
  # the Instance details page in the Google Cloud Platform Console.
  cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME

推荐阅读