从Heroku上的Node.js连接到CloudSQL

时间:2019-12-12 07:33:59

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

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

从AppEngine,Node.js通过用户/密码和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;

1 个答案:

答案 0 :(得分: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',
    },
});