Grails 2.3.11连接池初始化失败:SQL Server TCP/IP连接被拒绝
解决SQL Server 1433端口TCP/IP连接被拒绝的问题
先把你遇到的错误信息贴出来方便参考:
2018-04-19 20:57:38,504 [localhost-startStop-1] ERROR pool.ConnectionPool - 无法创建连接池的初始连接。com.microsoft.sqlserver.jdbc.SQLServerException: 与主机MY-PC的1433端口的TCP/IP连接失败。错误信息:“Connection refused: connect。请验证连接属性,确保主机上运行着SQL Server实例并在该端口接受TCP/IP连接,同时确保该端口的TCP连接未被防火墙阻止。”
这种连接拒绝的问题,咱们可以从几个核心环节逐一排查,一步步来:
1. 先确认SQL Server实例开了TCP/IP协议
很多时候默认安装的SQL Server可能没启用TCP/IP,这是常见坑:
- 打开SQL Server配置管理器,找到左侧的「SQL Server网络配置」,展开后选择你要连接的实例对应的「协议」
- 右键「TCP/IP」,看是不是「启用」状态,如果是禁用,先启用它,然后去「SQL Server服务」里找到对应实例,右键重启服务生效
2. 检查SQL Server是不是真在监听1433端口
启用了TCP/IP不代表它会监听1433,得确认端口配置:
- 还是在SQL Server配置管理器里,双击「TCP/IP」协议,切换到「IP地址」标签
- 拉到最底部的「IPAll」区域,确认「TCP端口」填的是1433(如果之前改了端口,连接字符串里也要对应改)
- 顺便检查上面各个IP地址的「已启用」状态,至少要有一个IP是启用并设置了正确端口的
3. 防火墙是头号嫌疑,必须排查
不管是本地还是远程连接,防火墙拦截1433是大概率事件:
- 本地Windows防火墙:打开「Windows Defender防火墙」→「高级设置」→「入站规则」→ 新建规则,选择「端口」,TCP端口填1433,允许连接,然后命名保存
- 如果是远程连接,还要确认目标主机(MY-PC)的防火墙也开放了1433端口的TCP入站流量
- 可以先临时关闭防火墙测试一下,要是能连上了,就说明是防火墙的锅,再回去把规则配好就行
4. 核对连接字符串的属性有没有错
别小看这个,有时候手滑输错主机名或者实例名就会出问题:
- 主机名
MY-PC是不是正确?可以试试换成MY-PC的IP地址来连接,排除DNS解析的问题 - 如果是命名实例(不是默认实例),连接字符串格式得是
MY-PC\你的实例名,而且命名实例默认不监听1433,得去查它的监听端口(可以用SQL Server配置管理器看,或者在实例里执行查询:SELECT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID;) - 另外确认用户名、密码有没有输错,以及这个账号有没有连接目标数据库的权限
5. 确认SQL Server服务正在运行
有时候服务可能意外停了:
- 按Win+R输入
services.msc打开服务管理器,找到「SQL Server(你的实例名)」,看状态是不是「正在运行」 - 如果没运行,右键启动,最好把启动类型改成「自动」,避免下次重启电脑后服务没起来
6. 用命令测试端口连通性
最后可以用工具验证一下端口是不是真的能通:
- 命令提示符里输
telnet MY-PC 1433,如果能成功连接会弹出空白窗口;要是提示连接失败,那就是端口没开放或者服务没监听 - 用PowerShell的话可以输
Test-NetConnection MY-PC -Port 1433,会返回更详细的连通性结果,比如是不是能ping通、端口是不是开放
内容的提问来源于stack exchange,提问作者xiotee




