我在我的 AWS 账户上设置了一个 RDS 实例,配置如下:
Engine: MySQL Community
Class: db.t3.small
Region: us-east-2b
有时为了测试,我需要从我在印度运行的本地节点应用程序连接到数据库。我使用 Sequelize 作为我的 ORM。在访问我的数据库之前,我确保我的 IP 在 RDS 安全组中被列入白名单,以便我的本地服务器可以访问数据库。
但是在最初的几次尝试中,我总是收到以下错误:
(node:7768) UnhandledPromiseRejectionWarning: SequelizeConnectionError: connect ETIMEDOUT
at ConnectionManager.connect (C:\Projects\my-app\node_modules\sequelize\lib\dialects\mysql\connection-manager.js:126:17)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async ConnectionManager._connect (C:\Projects\my-app\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:318:24)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:7768) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:7768) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我的 sequelize db 配置如下:
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
port: 3306,
dialect: 'mysql',
pool: {
max: 10,
min: 0,
acquire: 30000,
idle: 10000
},
logging: false
});
事情是经过几次尝试(比如 3-4 次)重新启动它最终连接的服务器后,才在服务器重新启动时(当我进行任何更改时)做同样的事情。继续这样做很令人沮丧,而且我花了很长时间在本地测试一些小东西。
知道为什么会发生这种情况吗?它是我的实例类(因为它的 t3 很小)还是我的续集配置中的东西?我知道我正在从亚洲一路访问北美大陆的数据库服务器设置,但我一直在重新启动并尝试多次以最终能够连接到它不应该是那么糟糕。
非常感谢您提供任何缓解问题的建议。
谢谢。
答案 0 :(得分:0)
你为什么要从亚洲地区连接我们地区的数据库?网络延迟可能是不稳定的应用程序<-> db 连接问题,您肯定不想在生产中这样做,即使在开发环境中也是不可取的,因为它会影响您的调试速度。尝试使用所有相同的配置并在我们的区域(与您的数据库相同的区域)中使用 EC2,然后看看是否一切正常。