MySQL连接被拒绝?可能是Windows防火墙在作怪!

问题描述

在使用DataGrip连接本地MySQL数据库时,遇到了以下错误:
在这里插入图片描述

DBMS: MySQL (no ver.) Case sensitivity: plain=mixed, delimited=exact
Connection refused to host: 127.0.0.1; nested exception is: java.net.ConnectException: Connection timed out: connect.

昨晚弄这个报错弄了一晚上,这个错误让人困惑,因为MySQL服务明明在运行,端口测试也是通的,但就是连接不上。而且你会发现:即使重新安装了MySQLDataGrip
还是没有任何用。在这里先提前总结一下吧:问题是出现在防火墙。下面我详细说一下

故障现象

  • ✅ MySQL服务状态正常
  • ✅ 端口测试通过:Test-NetConnection -ComputerName 127.0.0.1 -Port 3306 显示成功
  • ✅ 进程确认:mysqld.exe 在正常运行
  • ❌ DataGrip连接持续超时

排查过程

1. 基础服务检查

# 检查MySQL服务状态
sc query MySQL80

# 检查端口占用
netstat -ano | findstr :3306

# 检查MySQL进程
tasklist | findstr mysqld.exe

2. 网络连通性测试

# PowerShell测试端口
Test-NetConnection -ComputerName 127.0.0.1 -Port 3306

结果显示:

ComputerName     : 127.0.0.1
RemoteAddress    : 127.0.0.1
RemotePort       : 3306
InterfaceAlias   : Loopback Pseudo-Interface 1
SourceAddress    : 127.0.0.1
TcpTestSucceeded : True

3. DataGrip配置尝试

尝试了各种配置组合:

  • 使用 127.0.0.1localhost
  • 添加Advanced参数:
    useSSL=false
    allowPublicKeyRetrieval=true
    serverTimezone=UTC
    
  • 更换JDBC驱动版本
  • 重新安装DataGrip
  • 重新安装MySQL

根本原因发现

经过系统排查,发现问题在于Windows防火墙阻止了JDBC连接

虽然命令行工具和PowerShell可以连接,但Java应用程序(包括DataGrip)的网络连接被防火墙拦截。

解决方案

方案一:临时测试(确认问题)

# 临时关闭防火墙测试
netsh advfirewall set allprofiles state off

# 测试DataGrip连接,如果成功连接就可以确定问题是出在防火墙了

# 测试完成后重新开启防火墙
netsh advfirewall set allprofiles state on

方案二:永久解决方案(推荐)

添加防火墙规则允许MySQL端口:

# 以管理员身份运行命令提示符

# 为MySQL主端口3306添加规则
netsh advfirewall firewall add rule name="MySQL Server 3306" dir=in action=allow protocol=TCP localport=3306

# 为MySQL X Plugin端口33060添加规则
netsh advfirewall firewall add rule name="MySQL X Plugin 33060" dir=in action=allow protocol=TCP localport=33060

# 验证规则添加成功
netsh advfirewall firewall show rule name="MySQL Server 3306"

方案三:通过图形界面设置

  1. 打开"控制面板" → “Windows Defender 防火墙”
  2. 点击"允许应用或功能通过Windows Defender防火墙"
  3. 找到"MySQL Server"并勾选,或点击"允许其他应用"添加mysqld.exe

验证解决

添加防火墙规则后,在防火墙开启状态下测试DataGrip连接,应该能够正常连接。

# 最终验证
Test-NetConnection -ComputerName 127.0.0.1 -Port 3306

经验总结

  1. 不要忽视防火墙:即使连接本地服务,Windows防火墙也可能拦截Java应用程序的连接
  2. 分层排查:从服务状态→网络连通性→应用程序配置的系统化排查方法
  3. 临时测试很重要:临时关闭防火墙可以帮助快速确认问题根源
  4. 生产环境安全:在生产环境中,应该使用精确的防火墙规则而不是完全关闭防火墙

相关命令参考

# 检查防火墙状态
netsh advfirewall show allprofiles

# 查看所有防火墙规则
netsh advfirewall firewall show rule name=all

# 删除防火墙规则
netsh advfirewall firewall delete rule name="规则名称"

这个问题的排查过程提醒我们:有时候最简单的因素(如防火墙)往往是最容易被忽略的故障点。如果早点发现问题出在防火墙就不会浪费一晚上了哈哈哈哈(欲哭无泪)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐