你好吗?
我在将 Node.js 后端连接到 AWS RDS MySQL 数据库时遇到问题。我从 Digital Ocean 迁移到 AWS,它在 Digital Ocean 中运行得很好。但是,迁移到 AWS 并在本地执行 npm run start 后,我收到以下错误:
getaddrinfo ENOTFOUND 数据库X.xxxxxxxxxx.eu-west-3.rds.amazonaws.com 父级:错误:getaddrinfo ENOTFOUND 数据库X.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com 在 GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:118:26) { 错误号:-3007, 代码:'ENOTFOUND', 系统调用:'getaddrinfo', 主机名:'databaseX.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com', 致命:真实 },
此外,在 EC2 实例内或本地使用 Insomnia,我可以执行 npm run start 命令,甚至可以完美连接到数据库。但在本地,我无法使用相同的命令进行连接:
mysql -h 数据库X.xxxxxxxxxx.eu-west-3.rds.amazonaws.com -P 3306 -u admin -p
我已经尝试解决这个问题有一段时间了,我已经打开了安全组中的所有连接,但仍然无法以任何方式连接。我将分享我的安全组和连接数据库的代码。
这就是我使用node.js连接到数据库的方式
import { Sequelize } from 'sequelize';
import fs from 'fs';
import dotenv from 'dotenv';
dotenv.config();
const sequelize = new Sequelize(process.env.DB_NAME!, process.env.DB_USER!, process.env.DB_PASSWORD!, {
host: process.env.DB_HOST!,
port: Number(process.env.DB_PORT),
dialect: 'mysql',
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: true,
ca: fs.readFileSync('./certificates/ca-certificate-aws.pem').toString(),
},
},
});
export default sequelize;
DB_NAME=databaseX
DB_USER=admin
DB_PASSWORD=XXXXXXXXXXXXXXXX
DB_HOST=databaseX.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com
DB_PORT=3306
这就是我配置安全组的方式,我需要打开更多的门吗?
RDS实例是否开启公网访问?如果没有,您将无法从本地计算机直接连接到实例。您可以通过端口转发到 RDS 来连接到它