You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动