如何从本地计算机建立到 AWS ec2 实例的 MYSQL 连接?
How do I establish MYSQL connection to AWS ec2 instance from local machine?
我完成了我的项目,我正在尝试将它部署到 AWS。我有一个 ec2 实例作为我的网络服务器,具有以下配置详细信息:
- NodeJS 使用端口 5000
- PM2(始终保持服务器活动)
- NGINX 作为网络服务器从我的构建文件中读取
- MySQL 在 ec2 实例中作为我的数据库。 (使用端口 3306)
我的问题是我无法建立从我的本地机器到我的 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=mysql
、proto=tcp
、port range=3306
、source=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 服务,它现在可以工作了.
感谢您的建议,我会在我的文档中记录下来,以供日后检查。
我完成了我的项目,我正在尝试将它部署到 AWS。我有一个 ec2 实例作为我的网络服务器,具有以下配置详细信息:
- NodeJS 使用端口 5000
- PM2(始终保持服务器活动)
- NGINX 作为网络服务器从我的构建文件中读取
- MySQL 在 ec2 实例中作为我的数据库。 (使用端口 3306)
我的问题是我无法建立从我的本地机器到我的 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=mysql
、proto=tcp
、port range=3306
、source=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 服务,它现在可以工作了.
感谢您的建议,我会在我的文档中记录下来,以供日后检查。