从 Heroku 上的 Node.js 连接到 CloudSQL

Connecting to CloudSQL from Node.js on Heroku

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

从 AppEngine,Node.js 通过 user/password 和 socketPath 连接。我还通过主机 IP(通过 SSL)从 MySQL Workbench 连接到同一个 MySQL 数据库。

我正在尝试使用与 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;

我发现解决此问题的唯一方法是通过 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',
    },
});