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

远程租用的MySQL连接启动时报ETIMEDOUT超时错误该如何解决?

远程MySQL连接ETIMEDOUT超时排查与解决方案

启动时报错堆栈:

Error: connect ETIMEDOUT
    at Connection._handleConnectTimeout (I:\Websites\backend\node_modules\mysql\lib\Connection.js:409:13)
    at Object.onceWrapper (events.js:519:28)
    at Socket.emit (events.js:400:28)
    at Socket._onTimeout (net.js:484:8)
    at listOnTimeout (internal/timers.js:557:17)
    at processTimers (internal/timers.js:500:7)
    --------------------
    at Protocol._enqueue (I:\Websites\backend\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Protocol.handshake (I:\Websites\backend\node_modules\mysql\lib\protocol\Protocol.js:51:23)
    at Connection.connect (I:\Websites\backend\node_modules\mysql\lib\Connection.js:116:18)
    at Object.<anonymous> (I:\Websites\backend\Main.js:20:4)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Function.executeUserEntryPoint [as runMain] (internal/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47 {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true
}

第一步:基础网络层排查

  • 先在运行服务的本地设备上用telnet测试端口连通性,命令为telnet [数据库服务器IP] [MySQL端口,默认3306],如果telnet也超时,直接定位为网络层面问题,与代码逻辑无关
  • 也可以用nc命令测试连通性:nc -zv [数据库服务器IP] 3306,根据返回结果判断是否能正常建立连接
  • 排查本地设备的出口防火墙、当前使用的运营商网络是否封禁了3306端口的出站请求,多数家用宽带、企业内网会默认封禁3306端口的公网访问

第二步:第三方数据库服务器侧排查

  • 确认第三方服务器的入站安全组/防火墙规则,是否放行了本地设备的公网IP的3306端口访问,多数云服务商默认安全组不会放行3306端口的公网访问,或仅允许特定白名单IP访问
  • 登录第三方服务器执行systemctl status mysql(部分发行版为mysqld),确认MySQL服务处于active运行状态
  • 检查MySQL配置文件中的bind-address参数,确认配置为0.0.0.0(允许所有IP访问,生产环境不建议,优先绑定指定访问IP)或未绑定固定本地回环IP,默认安装的MySQL通常仅监听127.0.0.1,仅支持本地访问
  • 检查数据库账号的访问权限,连接使用的账号需要授权对应公网IP的访问权限,授权参考语句为grant all privileges on 库名.* to '用户名'@'你的本地公网IP' identified by '密码';,如果仅授权了本地访问权限,部分场景下也会返回超时错误

第三步:代码侧配置优化

  • 单次直连的模式建议改为连接池模式,避免长连接被服务器端主动断开后没有自动重连机制,node-mysql连接池参考配置:
const mysql = require('mysql');
const pool = mysql.createPool({
  host: '你的数据库服务器IP',
  user: '数据库用户名',
  password: '数据库密码',
  database: '目标库名',
  connectionLimit: 10,
  acquireTimeout: 30000, // 连接超时调整为30秒
  connectTimeout: 30000
});
  • 新增连接错误自动重连逻辑,单次连接场景下可以监听error事件,检测到fatal级错误时自动重建数据库连接

其他常见原因排查

  • 第三方服务器的公网带宽跑满、CPU/内存负载过高,导致MySQL无法响应新的连接请求
  • 本地公网IP发生变更,之前安全组白名单配置的是旧IP,新IP未被放行
  • 第三方服务商存在区域性网络故障,可以尝试用其他地区的设备测试数据库连接,确认是否为网络线路问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:57:02