You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用Sequelize连接AWS RDS MariaDB失败求助

Node.js项目Sequelize连接AWS RDS MariaDB超时问题

本地环境使用Sequelize连接MariaDB完全正常,但切换到AWS RDS托管的MariaDB时连接失败。已通过MySQL Workbench验证RDS实例的连接可用性,但Node.js项目抛出以下超时错误:

Unable to connect to the database: SequelizeConnectionError: (conn=1690, no: 45012, SQLState: 08S01) Connection timeout: failed to create socket after 1001ms

项目代码实现:

const dbConfig = require('../config/dbConfig');
const { Sequelize, DataTypes } = require('sequelize');

const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
    host: dbConfig.HOST,
    port: dbConfig.PORT,
    dialect: "mariadb",
    operatorsAliases: 0,
    define: {
        freezeTableName: true  // 默认会自动修改表名,用此参数限制该行为
    },
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    }
});

sequelize.authenticate()
    .then(() => {
        console.log('DB Connected...');
    })
    .catch((error) => {
        console.error(`Unable to connect to the database: ${error}`);
    })

排查与解决方案

  • 检查RDS安全组配置:确认RDS实例的安全组入站规则,允许Node.js服务所在的IP(或VPC)访问3306端口(MariaDB默认端口)。注意Workbench使用的是你本地IP,而Node.js服务可能是EC2公网IP、本地动态IP等,需确保这些IP都在安全组白名单内。

  • 延长连接超时参数:当前代码的连接池超时是针对获取连接的等待时间,需添加方言专属的连接超时配置,延长创建socket的等待时长:

const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
    // 原有配置保留
    dialectOptions: {
        connectTimeout: 10000  // 延长至10秒
    }
});
  • 校验dbConfig配置准确性:核对dbConfig.HOST是否为RDS实例的完整端点(如xxx.rds.amazonaws.com),PORT是否与RDS设置的端口一致,账号密码是否和Workbench使用的完全匹配,避免配置中存在多余空格或特殊字符。

  • 排查网络环境:若Node.js服务在VPC内,确认是否与RDS实例同属一个VPC,或已配置VPC对等连接、NAT网关等网络打通方案;若为本地开发,检查防火墙、代理是否阻止了3306端口的出站请求。

  • 调整MariaDB驱动版本:Sequelize的mariadb方言依赖mariadb驱动,部分版本可能存在兼容性问题,尝试升级或降级到稳定版本:

npm uninstall mariadb
npm install mariadb@3.2.0

内容的提问来源于stack exchange,提问作者Durvash Nimje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:17