使用 node-mysql 从 heroku 节点应用程序连接到 Amazon RDS 数据库

Posted

技术标签:

【中文标题】使用 node-mysql 从 heroku 节点应用程序连接到 Amazon RDS 数据库【英文标题】:Connecting to Amazon RDS database from heroku node app using node-mysql 【发布时间】:2016-03-16 20:00:34 【问题描述】:

我有

 app.connectionPool = mysql.createPool(
      host     : * * *, //(a.k.a ....rds.amazonaws.com)
      user     : * * *,
      password : * * *,
      database : * * *,
      ssl: 'Amazon RDS'
 );

用于初始化数据库池,它在本地运行良好(我的 IP 在 RDS 设置中被列入白名单),但从 heroku 运行时会出现 [Error connect ETIMEOUT] 错误。

我也试过了:

 app.connectionPool = mysql.createPool(
      host     : * * *, // (....rds.amazonaws.com)
      user     : * * *,
      password : * * *,
      database : * * *,
      ssl  : 
        ca : fs.readFileSync(__dirname + '/config/amazon-rds-ca-cert.pem')
      
);

关注 node-mysql 和 heroku 文档,但也没有用。

PS:我已经按照heroku 文档中的建议设置了GRANT USAGE ON *.* TO 'my_username'@'%' REQUIRE SSL;

【问题讨论】:

【参考方案1】:

我不知道您是否仍在为此苦苦挣扎(两年后),但您可能需要配置您的 RDS 实例以接受来自 Heroku 正在运行您的实例的任何 IP 地址的传入请求。或者(如果这只是一个您并不真正关心的爱好)打开所有 IP 地址。如果项目很严肃或有重要数据,请不要这样做。

您可以通过在 aws 控制台中打开 rds 实例并查看“安全组”来更改 IP 限制。您可能会看到允许 IP 地址访问实例的规则——这就是您应该更改的内容。

希望这行得通。

【讨论】:

永远不要打开所有端口 Heroku 的 IP 地址不会保持不变,即使是每周。

以上是关于使用 node-mysql 从 heroku 节点应用程序连接到 Amazon RDS 数据库的主要内容,如果未能解决你的问题,请参考以下文章

ER_CON_COUNT_ERROR:node-mysql 中的连接错误太多

节点mysql超时

如何将访问代码从 gmail api 传递给 Heroku 中的节点工作者

MySQL 查询在 phpMyAdmin 中返回的 node-mysql 中缺少结果

MySQL查询丢失导致在phpMyAdmin中返回的node-mysql

使用 firebase privateKey 作为 Heroku 配置变量的转义问题