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

How do I establish MYSQL connection to AWS ec2 instance from local machine?

我完成了我的项目,我正在尝试将它部署到 AWS。我有一个 ec2 实例作为我的网络服务器,具有以下配置详细信息:

我的问题是我无法建立从我的本地机器到我的 AWS ec2 实例的连接,该实例中有 MYSQL 数据库。我打开了 MYSQL workbench,我可以很好地连接到它,但是当我尝试从 node.js 建立到数据库的连接字符串时,它给了我一个错误。

我能够在 MYSQL workbench 内成功连接到数据库,但我现在如何从 nodejs 连接字符串连接到它?

我已经尝试过的是:

1) 在 AWS 安全组中为端口 5000 的所有传入流量打开 TCP 规则
2) 在 AWS 安全组中开放 MYSQL/Aurora 端口 3306
所有传入流量的规则 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 成功连接到数据库实例

再次确认,我认为您的安全组有问题,可能是您的服务器在内部侦听所以它正在发生。转到 EC2 security group 和 select 入站并将规则添加为 type=mysqlproto=tcpport range=3306source=0.0.0.0/0,::/0(允许所有)

发生这种情况可能有几个原因 -

  • 配置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

其实我想我刚刚弄明白了。

所以默认的mysql配置文件将ip绑定到127.0.0.1。但是,我更改了对我的 ec2 public ip 的绑定,并将默认的 "mysql" 更改为 "jordan" 并保存了配置文件,重新启动了 mysql 服务,它现在可以工作了.

感谢您的建议,我会在我的文档中记录下来,以供日后检查。