WSL2运行NodeJS连接Windows端XAMPP MySQL报ECONNREFUSED错误如何解决
故障根因
WSL2 和 Windows 属于两个独立的网络命名空间,你代码中填写的127.0.0.1指向的是 WSL2 自身的本地环境,不是运行 XAMPP MySQL 服务的 Windows 主机,因此会返回连接拒绝错误。
解决步骤
步骤1:获取Windows主机的WSL内网地址
两种获取方式二选一即可:
- 在WSL2终端执行命令
cat /etc/resolv.conf,输出结果中nameserver对应的地址就是Windows主机在WSL虚拟网络中的IP - 在Windows的CMD中执行
ipconfig,找到「以太网适配器 vEthernet (WSL)」对应的IPv4地址
步骤2:修改XAMPP MySQL的监听配置
- 打开XAMPP控制面板,点击MySQL模块对应的「Config」按钮,选择
my.ini配置文件 - 找到
bind-address配置项,默认值为127.0.0.1,修改为0.0.0.0(表示监听所有网卡的请求),如果配置文件中没有这行内容直接新增即可 - 保存配置文件,在XAMPP控制面板重启MySQL服务
步骤3:配置Windows防火墙放行3306端口
两种方式可选:
- 临时测试可以直接关闭Windows Defender防火墙,验证连通后再重新开启配置规则
- 正式配置:新增Windows入站规则,允许3306端口的TCP请求,源地址可以限定为WSL的网段(通常为172.x.x.x/16),避免端口暴露到公网
步骤4:开通MySQL的远程访问权限
- 打开XAMPP控制面板,点击MySQL模块对应的「Shell」按钮,进入MySQL命令行
- 执行以下命令,给root用户开通所有地址的访问权限(如果要限定只能WSL网段访问,把
%替换为WSL的网段前缀即可):
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ''; FLUSH PRIVILEGES;
如果你的root用户设置了密码,把上述命令中IDENTIFIED BY后面的空引号替换为你的实际密码
步骤5:修改NodeJS连接配置
把代码中mysql.createConnection的host参数替换为步骤1中获取的Windows主机IP即可,示例:
const db = mysql.createConnection({ host: '你获取到的WindowsIP', // 示例值:172.24.16.1 port: "3306", user: 'root', password: '', });
可选优化:解决WSL2网段变动问题
WSL2的虚拟网络网段每次重启Windows可能会变化,你可以在WSL2的/etc/hosts文件中新增一条固定映射,比如:
172.24.16.1 winhost
后续代码中host直接填写winhost即可,每次IP变动后更新这行配置即可,也可以编写自动脚本实现自动更新。
内容的提问来源于stack exchange,提问作者nostalgicbae
相关产品推荐
相关产品推荐

