如何连接服务器远程数据库?连接时持续出现ETIMEDOUT错误求助
解决远程MySQL连接ETIMEDOUT问题
检查服务器防火墙/安全组规则
ETIMEDOUT的核心原因是连接请求无法抵达目标服务器,优先确认:- 云服务器的安全组是否开放3306端口(MySQL默认端口),并允许你的客户端IP地址访问;
- 服务器本地防火墙(如iptables、ufw)是否放行3306端口的入站请求。
验证网络可达性与端口开放状态
用命令行直接测试网络连通性:- 测试IP连通:
ping 43.138.209.122 - 测试端口开放:
telnet 43.138.209.122 3306或nc -zv 43.138.209.122 3306
如果这两步失败,问题出在网络层面,和代码无关。
- 测试IP连通:
确认MySQL允许远程连接配置
登录服务器端的MySQL,执行以下操作:- 检查root用户的访问权限:
如果host列仅为SELECT host, user FROM mysql.user WHERE user='root';localhost或127.0.0.1,说明root仅允许本地访问,需要授权远程访问:GRANT ALL PRIVILEGES ON ltest.* TO 'root'@'你的客户端IP' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES; - 检查MySQL配置文件(my.cnf/my.ini)中的
bind-address参数,确保设置为0.0.0.0(允许所有IP访问),而非127.0.0.1,修改后重启MySQL服务。
- 检查root用户的访问权限:
完善代码连接参数
你的代码未指定端口和超时时间,可补充参数排除配置问题:
var pool=mysql.createPool({ host:'43.138.209.122', user:'root', password:'xxxxxxxx', database:'ltest', port: 3306, // 明确指定端口,若服务器修改过端口则替换为对应值 connectTimeout: 10000 // 设置10秒连接超时,便于排查 });
- 排查本地网络限制
确认本地网络的防火墙、代理或VPN未拦截3306端口的出站请求,可尝试切换网络(如手机热点)重新测试连接。
内容的提问来源于stack exchange,提问作者toby
相关产品推荐
相关产品推荐

