sql网络连接到服务器失败,核心思路就是一句话:先看报错码,再测网络连通性,最后查SQL Server服务、防火墙和账号权限,按这个顺序排查,大多数问题都能解决。
很多朋友一看到”连接失败”就慌,其实这个提示范围很宽,背后的具体原因却各有不同,下面我按实际排查的优先级,把常见场景和对应解法拆开讲清楚。
第一步:看懂报错码,别瞎猜原因
SQL Server连接失败时,客户端弹窗或日志里通常带一串数字,这串数字就是它的”病历”,不同编码指向不同病因。
常见报错码速查表
| 报错码(错误号) | 含义 | 常见原因 |
|---|---|---|
| 18456 | 登录失败 | 账号密码错误、SQL身份验证未开启 |
| 10061 | 目标计算机积极拒绝 | 端口没监听、防火墙拦截、服务未启动 |
| 26 / 25 | 定位服务器时出错 | 实例名写错、网络不可达 |
| 53 | 找不到服务器 | 服务器名称无法解析,主机名或IP错了 |
| 11001 | 无法解析主机名 | 域名或主机地址拼写有误 |
| 1205 | 连接超时 | 网络慢、安全组未放行、服务器负载高 |
先对照表定位方向,再往下逐项排查,比如报错是10061,就重点检查端口和服务状态,而不是反复试密码,浪费时间。
网络连通性排查:ping、telnet、端口探测三连
排除”网络根本不通”的情况,只需要做三个动作。
第一步:ping服务器IP
本地打开命令行,输入:
ping 服务器IP地址 -t
能通则说明网络线路没问题,不通则看丢包率,如果是云服务器,经常遇到的是安全组ICMP协议没开,导致ping不通但实际访问可能正常,这种情况可以跳过,直接试telnet。
第二步:telnet测试端口是否开放
telnet 服务器IP 1433
1433是SQL Server默认端口,如果黑窗口直接消失或提示连接失败,说明端口没通,问题大概率出在防火墙或服务未监听,如果光标停留在黑窗口闪动,说明端口通的,继续查服务端配置。
第三步:用客户端工具确认服务状态
连接失败但数据库服务正常这个场景很典型,很多人以为SQL Server没挂就能连,其实是两个独立概念,在服务器本机打开服务管理器:
Win + R → 输入 services.msc → 找到 MSSQLSERVER
状态必须是”正在运行”,启动类型建议设为”自动”,如果服务没跑起来,右键启动即可,启动失败时,去Windows事件查看器里找错误日志,常见原因包括磁盘空间满、权限不足、服务账号密码过期。
sql网络连接到服务器失败但数据库服务正常,问题多半在防火墙
服务在跑、端口也监听,但外部就是连不上,这就是典型的防火墙拦截场景,相当一部分10061错误由此产生。
在Windows Defender防火墙里放行端口
进入方式:
控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则
- 规则类型选”端口”
- 协议选择TCP,特定本地端口填1433
- 操作为”允许连接”
- 三个配置文件全部勾选(域、专用、公用)
- 名称随意,SQL Server 1433″
注意,如果你在SQL Server配置管理器里改了端口(比如改成14330),防火墙放行的也要跟着改成14330,两者必须一致。
云服务器场景:除了防火墙还有安全组
这几年用云服务器跑数据库的人越来越多,有个常见误区:只在Windows防火墙放行1433,忘了在云控制台的安全组规则里也加一条。
云控制台 → 实例 → 安全组 → 配置规则 → 入方向添加
- 协议:TCP
- 端口:1433/1433
- 来源:建议限定你公司的固定IP段,不要直接放行0.0.0.0/0,安全系数差别很大
安全组放行后,Windows防火墙也要同时放行,两者都通过,外部才能真正访问到SQL Server,这里特别提醒一句:国内云厂商的轻量应用服务器防火墙和安全组是两个独立入口,都要配置一次。
服务器端配置:远程连接开关和身份验证模式
网络通了,端口也开了,还是连不上?接下来要检查SQL Server自己的设置。
SQL Server配置管理器里的TCP/IP协议
打开方式:
开始菜单 → 搜索 SQL Server Configuration Manager SQL Server网络配置 → 实例名的协议 → TCP/IP 右键启用
默认情况下,SQL Server Express等版本可能没有同时启用TCP/IP,启用后还需要在IP地址页签里,滚动到底部找到”IPAll”,在”TCP端口”中填入1433,然后重启SQL Server服务生效。
身份验证模式切换
默认Windows身份验证模式下,客户端拿SQL账号密码登录会报18456,按下面操作切换到混合模式:
SSMS(SQL Server Management Studio)连接本机 → 服务器属性 → 安全性 → SQL Server和Windows身份验证模式
同时到”安全性 → 登录名”里,找到你用的SQL登录账号,确保状态为”启用”,密码没有过期,行业共识是:生产环境里SQL账号密码要定期轮换,但轮换后连接字符串里的密码也要同步更新,别改了数据库密码忘了改应用配置。
连接字符串和服务器名称写法,一个字符都不能错
很多情况下,报错信息一模一样,但改了服务器名称写法问题就没了。
本地连接和远程连接的写法差异
连接本机时:
服务器名称:.
或
服务器名称:localhost
连接远程服务器时,有三种写法:
IP地址,端口号 192.168.1.100,1433 写法二:计算机名实例名 SERVER01SQLEXPRESS 写法三:IP地址实例名 192.168.1.100SQLEXPRESS
sqlserver连接服务器名称怎么填?记住这个规则
有问”为什么我用IP连不上,但用计算机名连得上”,反过来也常见,规律是:
- 使用默认实例时,服务器名称只写IP或主机名即可
- 使用命名实例时,必须写成”主机名实例名”格式,IP后面跟实例名也可以
- 端口号不是默认1433时,必须写成”IP,端口”的格式,逗号是英文半角
应用配置文件里(比如web.config或appsettings.json),连接字符串的Server字段同理,国内开发者经常用”数据源=.”来表示本机默认实例,注意这个写法只适用于应用和数据库在同一台机器。
驱动选择对连接成功率的影响
老项目用SqlClient,新项目不少人换成Microsoft.Data.SqlClient,两者默认行为略有差异,连接失败时通过命令行工具sqlcmd验证是个好办法:
sqlcmd -S 服务器IP,1433 -U sa -P 你的密码
能进说明问题在客户端配置,不能进则继续检查服务端,TCP/IP和Named Pipes启用状态不同,连接字符串里可以用”Network Library=DBMSSOCN”强制走TCP/IP协议,能解决一部分偏门问题。
SQL网络连接到服务器失败的高频问答
Q1:SQL Server连接失败,报错18456,密码是对的但进不去,为什么?
18456错误状态25表示SQL身份验证模式未启用,状态23表示密码过期或账号被锁定,按上面说的切换到混合模式,并检查登录名属性里的状态选项,如果密码确实正确,但状态显示”已启用”,可以尝试用sa账号登录时不勾选”记住密码”,排除客户端密码缓存问题。
Q2:mysql连接服务器失败10061和sql server的10061是一回事吗?
是同一个底层网络错误,含义都是客户端发起的TCP连接被拒绝,区别在于,MySQL同样默认占用3306端口,出现10061时优先查mysqld服务状态和3306端口监听,简米云等云平台的安全组规则、本地防火墙、绑定地址(bind-address)是三大高频原因。
Q3:远程连接SQL Server一直超时,本地用却很快,怎么排查?
本地访问正常,远程超时,方向很明确:先确认服务器CPU和内存是否跑满,然后检查防火墙规则作用域设置,最后确认路由器或云厂商安全组是否做了端口映射和访问控制,据微软官方文档,SQL Server的默认连接超时时间是15秒,如果应用层设置了更短的超时,网络波动时更容易触发1205错误,可以适当调长连接超时和命令超时参数。
数据库连接这种问题,九成以上都是配置层面,真正需要重装服务的比例极低,掌握上面这套排查流程,碰到SQL网络连接到服务器失败时,几分钟内就能锁定病根并恢复业务访问。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/729489.html





