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

Node.js mysql2通过SSH隧道连接RDS超时,同环境mysql客户端可正常连接

排查与解决思路

1. 检查mysql2连接配置的细节差异

  • 强制使用TCP连接:mysql客户端输入127.0.0.1会默认走TCP,但mysql2如果配置host: 'localhost'可能尝试用Unix socket连接,而非隧道的TCP端口。务必显式指定host: '127.0.0.1'。
  • 调整连接超时参数:mysql2默认连接超时比官方mysql客户端短,可在配置中加connectTimeout: 15000(15秒),避免因隧道延迟导致超时。
  • 处理SSL要求:Aurora RDS默认启用SSL,mysql客户端会自动适配,但mysql2需要显式配置。如果用默认RDS证书,可添加:
    ssl: { rejectUnauthorized: false }
    
    若需严格验证,可传入RDS根证书内容。

2. 确保SSH隧道完全就绪再执行迁移

GitHub Actions中启动隧道后,可能需要几秒时间建立连接,直接跑迁移会因隧道未就绪超时。可添加等待步骤:

- name: Start SSH tunnel
  run: ssh -f -N -L 3307:<AURORA_ENDPOINT>:3306 ec2-user@<BASTION_IP> -i ${{ secrets.SSH_PRIVATE_KEY }}
- name: Wait for tunnel to be ready
  run: |
    sudo apt-get install -y netcat
    while ! nc -z 127.0.0.1 3307; do sleep 1; done
- name: Run migration
  run: npm run migrate

3. 验证Node.js实际读取的配置

在迁移脚本开头添加日志,确认环境变量是否被正确读取:

console.log('DB Host:', process.env.DB_HOST);
console.log('DB Port:', process.env.DB_PORT);

也可直接硬编码连接参数测试,排除环境变量覆盖问题。

4. 排查mysql2版本或环境兼容问题

  • 尝试升级/降级mysql2版本,部分旧版本在容器环境下存在TCP连接bug。
  • 检查GitHub Actions容器的网络限制,确保无进程占用3307端口,或隧道绑定地址错误(需绑定127.0.0.1而非仅容器内部地址)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:00:04