从配置文件/环境变量读参数时,AWS Lambda(Node.js)无法连接MySQL
解决思路
检查参数的隐性格式问题
即使日志显示参数正常,也可能存在易忽略的格式问题:比如环境变量读取的host带首尾空格、port是字符串类型(如"3306")而非数字。部分MySQL驱动对格式敏感,解析失败会默认 fallback 到127.0.0.1:3306。建议使用前统一格式化:const dbConfig = { host: process.env.DB_HOST?.trim() || '', port: parseInt(process.env.DB_PORT, 10) || 3306, user: process.env.DB_USER?.trim() || '', password: process.env.DB_PASSWORD?.trim() || '', database: process.env.DB_DATABASE?.trim() || '' };打印完整配置对象做验证
不要只打印单个参数,直接输出脱敏后的完整配置对象,确认host确实是目标数据库地址(而非空值、undefined或localhost):console.log('DB Config:', JSON.stringify({ ...dbConfig, password: '***' }));确认配置加载时机与连接初始化顺序
如果用本地配置文件,检查打包时是否将文件包含进Lambda部署包;如果是异步加载配置,确保连接初始化逻辑在配置加载完成后执行——若同步初始化连接,会因配置未加载完成使用默认值。对齐硬编码与配置读取的连接逻辑
硬编码能成功,说明网络和驱动核心逻辑没问题,检查从配置读取时是否遗漏了关键参数,比如AWS RDS需要的ssl配置:// 确保配置读取时也包含该参数 const connection = mysql.createConnection({ ...dbConfig, ssl: { rejectUnauthorized: false } });同时可以尝试切换到
mysql2驱动(兼容性更优),排查旧版本mysql驱动的参数解析bug。强制指定网络协议类型
若VPC环境不支持IPv6,可能因参数解析问题触发IPv6连接尝试,导致 fallback 到本地地址。可强制指定IPv4:const dbConfig = { ..., family: 4 // 强制使用IPv4协议 };
内容的提问来源于stack exchange,提问作者user20864874
相关产品推荐
相关产品推荐

