通过 node.js 连接 aws mysql 时总是显示错误

Posted

技术标签:

【中文标题】通过 node.js 连接 aws mysql 时总是显示错误【英文标题】:Always show error when connecting aws mysql via node.js 【发布时间】:2019-01-02 23:01:56 【问题描述】:

我尝试通过 nodejs 连接 aws mysql

var mysql      = require('mysql')
var connection = mysql.createConnection(
  host     : 'xxxx.xxxc.ap-northeast-1.rds.amazonaws.com',
  port      :  '3306',
  user     : 'dbusername',
  password : 'passwords',
  database : 'dbname'
)

connection.connect(function(err)

if(!err) 
    console.log("connected ... ")
 else 
    console.log(err)

);

当我运行这段代码时,它需要几秒钟,然后显示以下错误 -

 Error: connect ETIMEDOUT
at Connection._handleTimeoutError (/node_modules/mysql2/lib/connection.js:181:13)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
errorno: 'ETIMEDOUT',
code: 'ETIMEDOUT',
syscall: 'connect',
fatal: true 

我google了很多,找不到正确的答案,我尝试使用node-mysql2,也有同样的问题。有什么想法吗?

【问题讨论】:

你能从节点服务器位置ping主机xxxx.xxxc.ap-northeast-1.rds.amazonaws.com吗? 更新:我找到原因了,换sg就好了。 这里的 sg 是什么? @eduPeeth SecurityGroups 【参考方案1】:

通过任何 mysql 客户端(mysql workbench、dbninja 等)连接你的 mysql aws rds 来检查它,如果你能够通过任何客户端连接它,那么 nodejs 设置一定有问题,否则会出现问题RDS 详细信息。

还要检查 RDS 是否限制了特定 *** 的访问因此您的节点服务器应该在同一个 *** 中进行连接。

【讨论】:

【参考方案2】:

默认情况下,对 AWS RDS 实例的网络访问是关闭的。

我强烈建议:

    测试您的 Nodejs 实例是否能够连接到 mysql 实例。你可以这样做: sudo apt-get install mysql-client(适用于 Ubuntu)

    检查 RDS 实例的安全组配置。 Follow AWS tutorial.

    关注AWS RDS Security Best Practices 并适当地配置安全组。

【讨论】:

【参考方案3】:

检查以下事项:

1-RDS安全组并确保您的IP地址可以访问您的RDS, https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

2-检查您的密码

【讨论】:

以上是关于通过 node.js 连接 aws mysql 时总是显示错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 从 AWS Lambda 函数连接到 MySql 数据库,没有连接回调

AWS 部署 NGINX 连接被拒绝用于 Node.JS 项目

无法在 GitHub 操作中将 Node.js 与 Docker MySQL 数据库连接

其他通过html用node.js连接和显示mysql的方式

Node.Js AWS SES - 发送电子邮件时的 ETIMEDOUT

无法使用 Node.js 和 AWS EC2 访问 mysql 服务器