【问题标题】:Connecting to CloudSQL from Node.js on Heroku从 Heroku 上的 Node.js 连接到 CloudSQL
【发布时间】:2020-04-05 13:20:52
【问题描述】:

我有一个连接到 GCP CloudSQL (MySQL) 实例的 Node.js 应用程序(在 AppEngine 上运行)。现在我想从运行在 Heroku 上的 Node.js (Knex) 连接到同一个数据库。

从 AppEngine,Node.js 通过用户/密码和 socketPath 连接。我还通过主机 IP(通过 SSL)从 MySQL Workbench 连接到同一个 MySQL DB。

我正在尝试使用与 Heroku 中的 Workbench 相同的主机、端口、用户和传递,但它无法正常工作。为方便起见,我暂时允许所有网络连接 (0.0.0.0/0) 并允许非 SSL 连接。

这是错误:ER_ACCESS_DENIED_ERROR: Access denied for user 'usernamehere'@'xx.xxx.xxx.xx' (using password: YES)"

环境变量存储在 Heroku 应用程序中,它们必须工作,因为用户名是正确的。

这不是很有帮助,但这里是代码:

import Knex = require('knex');
const envConfig = require('../config/environments').get(process.env.NODE_ENV);
module.exports = knex;

【问题讨论】:

标签: mysql node.js heroku google-cloud-sql knex.js


【解决方案1】:

我发现解决此问题的唯一方法是通过 SSL 连接到 CloudSQL。

const mysql = require("mysql");
const fs = require('fs');
const knex = require('knex')({
    client: 'mysql',
    version: '5.7',
    connection: {
      host : 'xx.xx.xx.xx',
      ssl: {
        ca: fs.readFileSync('ca.pem'),
        key: fs.readFileSync('client-key.pem'),
        cert: fs.readFileSync('client-cert.pem'),
      },
      user : 'root',
      password : 'xxxxxxxxx',
      database : 'mydbname',
    },
});

【讨论】:

  • 您在哪里/如何生成要传递给 ssl 配置的文件?
  • 我在 GCP 控制台中生成了凭据。
  • 对不起,你介意把我链接到哪里。我曾尝试创建一个服务帐户,但这只允许我下载一个密钥文件,而不是其他两个 pem。谢谢。
  • 当然...转到console.cloud.google.com/sql/instances,选择您的实例,然后转到连接。在“连接”下,您会找到配置 SSL 的选项,包括“创建客户端证书”。
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 2017-04-18
  • 1970-01-01
  • 2020-08-17
  • 2019-05-19
  • 2011-11-26
  • 2018-05-27
  • 2013-08-07
相关资源
最近更新 更多