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

Node.js使用mysql包执行查询时遭遇connect ETIMEDOUT异常求助

解决Node.js mysql包连接超时(connect ETIMEDOUT)问题

看到你遇到了connect ETIMEDOUT错误,这个问题本质是你的Node.js客户端无法在规定时间内和目标MySQL服务器建立网络连接——和你写的SQL语句、目标表是否存在无关,毕竟连都没连上,还没到执行查询的阶段。下面给你几个排查和解决的具体步骤:

  • 先排查网络连通性
    先确认你的机器能不能正常访问10.90.103.4这个服务器:

    • 用ping命令测试:ping 10.90.103.4,如果丢包或者完全不通,说明是网络链路问题(比如防火墙拦截、VPC网络隔离、服务器宕机),得先解决网络层面的问题。
    • 测试MySQL端口是否开放:默认MySQL端口是3306,Windows可以用PowerShell执行Test-NetConnection 10.90.103.4 -Port 3306,Linux/macOS用nc -zv 10.90.103.4 3306,如果提示无法连接,大概率是服务器端防火墙挡住了3306端口,或者MySQL服务没监听这个端口。
  • 检查MySQL用户的连接权限
    MySQL默认会限制用户的连接来源,比如someuser可能只允许从localhost或者特定IP连接,你的客户端IP不在允许列表里也会导致连接失败(表现为超时或拒绝连接)。
    登录到MySQL服务器,执行以下命令查看用户权限:

    SELECT user, host FROM mysql.user;
    

    如果someuser对应的host不是你的客户端IP或者%(允许任意IP,生产环境不建议使用),就需要给用户授权:

    GRANT ALL PRIVILEGES ON db.* TO 'someuser'@'你的客户端IP' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
  • 完善连接配置参数
    你的连接配置里可能缺了一些关键参数:

    • 如果MySQL服务不是用默认的3306端口,一定要加上port参数;
    • 可以适当延长连接超时时间,避免因为网络延迟导致超时。修改后的配置示例:
    var mysql = require('mysql');
    var con = mysql.createConnection({ 
      host: "10.90.103.4", 
      user: "someuser", 
      password: "********", 
      database: "db",
      port: 3306, // 非默认端口时修改为实际端口
      connectTimeout: 10000 // 延长到10秒,默认超时时间较短
    });
    
  • 确认MySQL服务状态
    登录到目标服务器,检查MySQL服务是否正常运行:

    • Linux系统:systemctl status mysql
    • Windows系统:打开服务管理器,找到MySQL服务查看是否处于运行状态

按照上面的步骤一步步排查,应该能快速定位到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:32:49