如何从本地计算机建立与AWS ec2实例的MYSQL连接?

时间:2019-05-22 06:47:34

标签: mysql node.js amazon-ec2 production

我已经完成了项目,并试图将其部署到AWS。我有一个ec2实例作为我的Web服务器,具有以下配置详细信息:

  • 使用端口5000的NodeJS
  • PM2(始终保持服务器处于活动状态)
  • NGINX作为Web服务器从我的构建文件中读取
  • ec2实例中的MySQL作为我的数据库。 (使用端口3306)

我的问题是我无法建立从本地计算机到其中包含MYSQL数据库的AWS ec2实例的连接。我打开了MYSQL工作台,可以在那里很好地连接它,但是当我尝试从node.js建立到数据库的连接字符串时,会出现错误。

我能够在MYSQL工作台中成功连接到数据库,但是现在如何从nodejs连接字符串连接到数据库?

我已经尝试过的是:

1)在AWS安全组中,为端口5000处的所有传入流量打开TCP规则
2)在AWS安全组中,为端口3306上的所有传入流量打开MYSQL / Aurora规则
3)向用户授予上的所有特权,并刷新并重新启动mysql服务器。

错误,它使我进入控制台。

`{ Error: connect ECONNREFUSED 14.54.xxx.xx:3306
    at Object._errnoException (util.js:1019:11)
    at _exceptionWithHostPort (util.js:1041:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)
--------------------
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '14.54.xxx.xxx',
  port: 3306,
  fatal: true }`

这是我的代码试图建立连接:

```var mysql = require("mysql");

// Local Works just fine

// var connection = mysql.createConnection({
//   host: "localhost",
//   user: "root",
//   password: "xxx",
//   database: "devdb",
//   charset: "utf8mb4"
// });

// Production Connection to AWS MYSQL instance (stuck on)

var connection = mysql.createConnection({
  host: "14.54.xxx.xxx",
  port: "3306",
  user: "jordan",
  password: "xxx",
  database: "productiondb"
  charset: "utf8mb4"
});

// Test the db connection

connection.connect(function(err) {
  if (err) {
    console.log(err);
  } else {
    console.log("Connected!");
  }
});

module.exports = connection;
```

我希望能够从我的NodeJS成功连接到数据库实例

3 个答案:

答案 0 :(得分:1)

再次确保,我认为您的安全组有问题,也许您的服务器在内部侦听,所以这正在发生。转到您的EC2 security group并选择“入站”,然后将规则添加为type=mysqlproto=tcpport range=3306source=0.0.0.0/0,::/0(全部允许)

答案 1 :(得分:1)

可能由于几种原因-

  • 配置MySQL数据库
   #start MySQL server sudo service mysqld start
   #run configuration sudo mysql_secure_installation

在提示符下,请执行以下步骤:

Enter current password for the root account: press Enter key
Set root password? Y
New password: yourpassword
Re-enter new password: yourpassword
Remove anonymous users? Y
Disallow root login remotely? n
Remove test database and access to it? Y
Reload privilege tables now? Y
  • 如果使用RDS,则必须提供对保存数据库的VPC的NAT访问。有关更多信息,请参阅here

答案 2 :(得分:0)

实际上我想我只是想通了。

因此,默认的mysql配置文件将ip绑定到127.0.0.1。但是,我将绑定更改为ec2公共ip,并将默认的“ mysql”更改为“ jordan”,然后保存了配置文件,重新启动了mysql服务,现在可以使用了。

谢谢您的建议,我会在文档中将其写下来以供将来检查。