SQL Server 2019连接不到服务器时,先检查服务是否启动、防火墙是否放行1433端口、身份验证模式是否设置正确,并按顺序重启相关服务,大多数问题都能在几分钟内解决。
最常见的故障原因:服务没启动或端口被占用
我在日常运维中遇到的情况,十次里有六次是SQL Server服务根本没跑起来,你在开始菜单搜索“服务”,或者按Win + R输入services.msc,找到SQL Server (MSSQLSERVER),如果状态不是“正在运行”,右键启动它,如果启动后立刻又停了,去Windows事件查看器里看错误日志,多半是权限或配置文件损坏。
端口被占用是另一大坑,SQL Server 2019默认监听1433端口,但如果你装了多个实例,或者系统里别的程序抢了这个端口,连接就会失败,打开命令提示符输入netstat -ano | findstr :1433,看看监听该端口的进程ID是不是sqlservr.exe,如果不是,说明端口冲突,解決方法是改SQL Server的端口,步骤很麻烦,建议直接用SQL Server配置管理器调整。
本地连接不上服务器时,先排查这三个地方
如果你是用本机SQL Server Management Studio(SSMS)连本机实例都报错,别急着重装系统,按顺序检查下面的配置。
检查SQL Server配置管理器中的网络协议
打开SQL Server 2019配置管理器(在开始菜单里搜SQL Server Configuration Manager),点击“SQL Server网络配置”,选择你要连接的实例(默认实例是MSSQLSERVER)。确保TCP/IP协议已启用,很多数据库在安装时默认只启用了Shared Memory,但这玩意只给本机用,而且SSMS有时会抽风,老连不上。
确认身份验证模式不是只看Windows认证
连接时报“用户登录失败”或“无法连接”并且提示18456错误,通常是你安装时选了“Windows身份验证模式”,如果你现在只能用Windows账户登录,而你的程序需要sa账号,那就得改,用Windows身份登录SSMS后,右键服务器选“属性”,在“安全性”里改成“SQL Server和Windows身份验证模式”,改完记得要重启SQL Server服务才生效,这也是很多人改了却没用的原因。
检查服务和启动账户是否有权限
SQL Server服务启动账户如果被改了,或者本机账户密码过期,服务会直接起不来,在服务里双击SQL Server (MSSQLSERVER),看“登录”选项卡,建议使用
NT ServiceMSSQLSERVER这种内置账户,避免用普通域账号。
远程连接失败和连接超时,多半是防火墙和网络配置问题
本地能连但远程连不上,或者连上去就超时,是我在论坛里看到问得最多的一类,SQL2019远程连接服务器失败的原因,按可能性排列如下。
防火墙没有放行1433端口
这是远程连不上第一大原因,在控制面板的Windows Defender防火墙里,点“高级设置”,选“入站规则”->“新建规则”,端口选TCP,填1433,或者偷懒用一行命令搞定(管理员身份运行PowerShell):
New-NetFirewallRule -DisplayName "SQLServer1433" -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow
需要注意的是,如果SQL Server是命名实例,默认用动态端口,那就更麻烦,建议给固定端口,然后在防火墙里放行固定端口。
SQL Server的允许远程连接选项没开
打开SSMS连上服务器,右键服务器属性->“连接”选项卡,勾选“允许远程连接到此服务器”,这一步很多人会忽略,因为默认设置下其实是允许的,但如果之前有人改过,就会卡在这。
网络地址和端口号写错
远程连接时,服务器名称那栏要写IP地址,端口号,比如远程主机IP是192.168.1.10,端口是1433,就要填168.1.10,1433,很多类似sql2019连接不到服务器的提问者,就是只写了IP没带逗号和端口,导致连上了但找不着实例。
路由器或云安全组未转发
如果你的数据库在云服务器或者内网中的一台机器上,光改Windows防火墙没用,简米云、酷番云的安全组规则,或者路由器NAT转发没配置,外部IP永远连不进去,登录云控制台,找到安全组,入方向添加TCP 1433端口,具体菜单不同云厂商略有差异,但思路一样。
SQL Server 2019网络配置的具体操作步骤
既然要诊断,就得有手段,我自己碰到连接问题,会按以下顺序做一遍排查,你也可以完全照着抄。
- 测试服务器是否可达,ping一下目标IP,如果ping不通,是网络层问题;ping得通但连不上,多半是端口或服务问题。
- 测试端口是否通,用telnet命令,例如
telnet 192.168.1.10 1433,如果telnet提示连接失败,防火墙或服务问题。 - 查看SQL Server错误日志,在SSMS里连不上也没关系,去安装目录
C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLLogERRORLOG文件夹下,打开最新的ERRORLOG文件,搜索“Server is listening on”,能看到它到底监听哪个IP和端口。 - 检查别名配置,打开“SQL Server配置管理器”->“SQL Native Client 11.0配置”->“别名”,如果里面配置了乱七八糟的别名,SSMS连接时可能会被定向到错误地址。
如果你遇到的是sql2019连接服务器超时,上面第2步基本能定位,超时一般意味着请求没到SQL Server,要么是网络防火墙拦截,要么是服务器根本不在线。
常见错误代码对应的解决方案
| 错误编号 | 典型提示 | 解决办法 |
|---|---|---|
| 18456 | 用户登录失败 | 身份验证模式、sa账号被禁用或密码错误 |
| 26 | 定位指定的服务器/实例时出错 | 协议未启用、SQL Browser服务未启动 |
| 40 | 无法打开到SQL Server的连接 | 防火墙端口、网络问题 |
| 2 | 服务器不是SQL Server或服务无法启动 | 服务未运行、连接字符串错误 |
| 11001 | 系统找不到指定的主机 | DNS或hosts解析问题 |
特别说一下编号26,这个对远程尤其常见,因为连接命名实例时,SQL Server Browser服务(UDP 1434端口)充当了寻址的角色,如果你连的是命名实例,确保SQL Server Browser服务正在运行,并且防火墙放行UDP 1434端口,否则客户端找不到实例地址,报错26是家常便饭,业内专家指出,至少有一半的“找不到服务器”问题,根源其实是Browser服务不工作。
配置固定端口与关闭动态端口,保证连接稳定
如果你的环境比较复杂,或者多实例并存,强烈建议给每个实例分配一个固定端口,在SQL Server网络配置中,双击“TCP/IP”协议,切到“IP地址”选项卡,找到“IPAll”部分,把“动态端口”留空,把“TCP端口”填一个自定义值,比如15001,填完后重启服务,以后就用
服务器IP,15001连接。
固定端口的好处很明显:防火墙规则好写、连接字符串稳定、不会再出现重启后端口变了导致连不上的情况,如果同一台机器上装了多个SQL Server实例,不用固定端口的话,日子会很难过。
Q&A:关于SQL Server 2019连接问题的常见疑问
问:SQL Server 2019连不上服务器,重启电脑后就好了,但过几天又不行,这是为什么?
答:多半是服务没有设置为自动启动,在服务管理器里找到SQL Server相关服务,右键属性,启动类型改为“自动”,如果服务器内存紧张,SQL Server可能被系统自动停止,检查Windows事件日志中是否有内存压力记录,确保服务器物理内存充足,或者设置合理的最大服务器内存,让系统有足够余量。
问:用SSMS能连上,但程序连接报错“连接被拒绝”,请问sql2019连接不到服务器的原因在哪?
答:SSMS连接时可能走了Shared Memory协议,而程序用TCP/IP连接,检查TCP/IP协议是否启用,同时确认连接字符串中的端口号正确,还有一点,程序连接时如果是本地连接,可能会被SQL Server误认为远程连接,从而触发远程连接权限限制,在服务器属性里勾选“允许远程连接”即可,如果程序使用sa账号,确认sa账号没有被禁用,密码没有过期,并且在允许登录的列表中。
问:遇到SQL Server 2019连接不上且报错“已成功与服务器建立连接,但是在登录过程中发生错误”,应该怎么处理?
答:这个错误常见于登录超时或凭证问题,先用Windows身份验证模式登录,检查服务器的错误日志,如果是18456错误,查看对应的状态值,状态值8表示密码不匹配,状态值1表示用户不可用,在“安全性”->“登录名”中找到该账号,右键属性,确认“强制密码策略”是否勾选,必要时取消登录过期限制,如果账号在活动目录中,需要同步域密码,确认SQL Server配置管理器中,客户端协议允许TLS加密,并且证书无误。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/653398.html





