SQL启动不了本地服务器失败,九成是服务未启动、端口被占用或配置文件权限出错,直接按下面顺序排查,多数情况五分钟内能解决。别急着重装数据库,那是最笨的办法。
sql server本地服务器启动失败怎么解决
先别慌,把自己当成一个侦探,SQL数据库启动失败,表面上是一个错误弹窗,背后通常是几个固定角色在捣乱,按下面这个顺序排查,效率最高。
第一步:确认服务到底“死”在哪
很多人点了个图标,看见报错就以为数据库坏了,90%的“启动失败”只是Windows服务没起来,按下Win + R,输入services.msc回车,在服务列表里找到这几个名字:
- SQL Server (MSSQLSERVER)这是主服务,默认实例
- SQL Server (SQLEXPRESS)Express版本专属,名字里带实例名
- SQL Server代理一般用不到,但报了错会拖后腿
找到之后,右键点击,看状态,如果是“停止”,直接点“启动”,如果启动瞬间报错,右键选“属性”,切到“登录”选项卡,确认“此账户”是不是填的NT AUTHORITY\NETWORK SERVICE或LocalSystem,这里出问题的概率不小,改完再启动试试。
第二步:端口冲突是头号嫌疑犯
很多新人遇到过这种情况:昨天数据库还好好的,今天突然启动不了,最大可能不是SQL坏了,而是某个程序抢了1433端口,这个端口是SQL Server的默认家门,被占了就进不去。
在命令行里敲一句:
netstat -ano | findstr :1433
如果蹦出一行字,结尾有个PID数字,去任务管理器里找到这个PID对应的进程,如果看到的是Apache、Tomcat或者某个不知名软件,恭喜你,抓到元凶了,解决方案有两个:
- 把占用端口的程序关掉
- 给SQL Server换个端口(右键服务,选“属性”,切到“启动参数”,把
-p1433改成-p1434之类)
改完之后,重启SQL服务,十有八九就好了。
第三步:看看错误日志说了什么实话
Windows事件查看器是个好东西,很多人不用,打开方式:Win + R,输入eventvwr.msc,展开“Windows日志”下的“应用程序”,按时间排序,找红色感叹号的条目,来源是MSSQLSERVER的,双击看详情,里面会写清楚失败原因。
常见几种错误信息对照表:
| 错误信号 | 真实原因 | 处理办法 |
|---|---|---|
| 找不到文件或路径错误 | 数据库文件(.mdf)被移动了 | 用“附加”功能重新指向文件位置 |
| 拒绝访问 | 文件夹权限不足 | 右键数据文件夹,给SQL Server用户加“完全控制”权限 |
| 超时时间已到 | 服务间依赖关系断开 | 检查SQL Server代理和全文索引服务是否启动 |
| 版本不兼容 | 数据库文件版本高于当前实例 | 升级SQL版本,或用更高版本实例附加 |
sqlserver服务无法启动错误代码排查
如果服务启动时直接弹错误代码,比如错误码1053或错误码5,别去搜索引擎里挨个查,它们的意思其实很直白。
错误码1053:服务没有及时响应
这个最常见于电脑刚开机、内存被占满时,SQL服务启动需要初始化一堆东西,系统等得不耐烦就报1053,解决思路:先重启一遍电脑,如果还不行,给服务“登录”选项卡里选上“允许服务与桌面交互”,再不行就把虚拟内存调大一点。
错误码5:访问被拒绝
典型场景是改了Windows密码之后,SQL服务突然起不来了,原因在于服务的登录账号密码和系统当前密码对不上,去服务属性里,“登录”选项卡,重新输入一遍系统管理员密码,点“确定”再启动,这个坑很多人踩过,SQL不会自己更新密码。
加一个保险:检查依赖项
SQL Server不是独立运行的,它依赖几个前置服务,用管理员身份打开命令行,敲:
sc qc MSSQLSERVER
看输出的“依赖服务”列表,逐一手动启动这些依赖项,再回来启动SQL,问题经常就这么解开了,行业共识认为,多数SQL服务启动失败都是依赖项断链,这一步很少人注意到,但成功率极高。
数据库连接不上本地服务器怎么办
有时候服务明明已经启动了,但客户端就是连不上,表现是:报错“找不到服务器实例”或者“连接超时”,这种情况和“启动失败”是两码事,但新手往往混在一起排查,越弄越乱。
先检查网络配置
打开SQL Server配置管理器,左侧展开“SQL Server网络配置”,点“MSSQLSERVER的协议”,看右边列表里:
- Shared Memory本地连接用,必须启用
- Named Pipes有时需要,建议启用
- TCP/IP远程连接必开,本地也建议开着
如果TCP/IP是“禁用”状态,右键启用,然后重启SQL服务,这里有个细节:改名或改端口之后,服务必须重启一次,只点“应用”不重启等于没做。
连接字符串写对了吗
本地连接虽然不用写主机名,但实例名不能搞错,比如装的是Express版,服务器名要写localhost\SQLEXPRESS而不是简单的localhost,用SQL Server Management Studio登录时,服务器类型选“数据库引擎”,服务器名输入框里有下拉箭头,点一下选“浏览更多”,能看到本机所有可用实例这个办法最踏实,不会写错名字。
防火墙把路堵死了
Windows自带的防火墙偶尔会拦SQL的端口,去控制面板的“Windows Defender防火墙”,左侧点“高级设置”,再点“入站规则”,右边“新建规则”,选“端口”,填1433,允许连接,完成,据统计,相当一部分本地连接失败的案例最后都出在防火墙上,折腾半天数据库,其实跟数据库半毛钱关系没有。
SQL启动失败的深度自救方案
如果以上招都用完了,服务还是起不来,别认输,还可以再深入一层。
用单用户模式拉一把
单用户模式是SQL Server的“安全模式”,能绕开一些启动时的卡死问题,以管理员身份打开命令行:
- 先关掉SQL服务:
net stop MSSQLSERVER - 再以单用户模式启动:
net start MSSQLSERVER /f - 用命令行工具连接:
sqlcmd -S localhost
进入之后,可以执行修复命令,
ALTER DATABASE [你的数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('你的数据库名') WITH NO_INFOMSGS;
命令执行完,退出,再正常重启服务,这一套操作能修好相当一部分“起不来”的疑难杂症。
配置文件被改残了
SQL的配置文件存放在安装目录下的\MSSQL\Setup Bootstrap\Log文件夹里,里面有安装时的日志,排查的关键不是去改配置文件直接改容易越改越坏而是确认配置是否被某些软件篡改,如果近期装过安全软件或“优化工具”,它们特别喜欢动SQL的权限配置,卸载这些工具,再重新启动服务,多数能恢复正常。
最后的体面方案:修复安装
如果所有方法都试过了,SQL还是一个死样子,那就用最后一招“原地修复”,去控制面板的“程序和功能”,找到SQL Server,右键选“更改”,会弹出安装中心窗口,选“修复”,这个操作会保住现有数据库文件,只修复系统文件和注册表项,过程大约十到二十分钟,期间不要断电,不要开其他大型应用。
业内专家指出,修复安装的成功率在多数场景下高于直接卸载重装,而且省去备份恢复的麻烦。
修复完再启动服务,如果还不行,那基本可以确认是操作系统层面的问题了,比如系统补丁冲突或注册表损坏这种情况建议联系专业的数据库运维人员处理,别自己硬来。
QA:关于SQL启动失败的高频疑问
Q1:SQL启动失败会影响已有数据库文件吗?
不会,数据库文件(.mdf和.ldf)和SQL服务是两码事,服务启动失败,文件只是“躺在磁盘上睡觉”,不会丢失,也不会损坏,解决服务问题后重新启动,数据依然原封不动,如果实在不放心,先把C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA目录下的文件复制到其他磁盘备份,再慢慢排查。
Q2:为什么重启电脑后SQL经常启动失败?
多数情况下,这是因为SQL服务的启动顺序早于网络服务和依赖项,Windows开机时服务按顺序拉起,SQL跑太快了,依赖项还没就绪,结果就报了失败,处理方法:在服务属性里把“启动类型”改成“自动(延迟启动)”,给系统一点缓冲时间,如果你设置了密码策略强制改密码,密码变动后服务也会启动失败,需要重新在服务属性里更新登录密码。
Q3:sqlcmd命令找不到怎么办?
sqlcmd是SQL Server自带的命令行工具,如果你没装它,或者装了但没加入系统环境变量,命令行会提示“不是内部或外部命令”,解决方法:打开SQL Server安装中心,点“安装”选项卡,选“新建SQL Server独立安装”,过程走到“功能选择”时,勾上“客户端工具连接”和“SQL工具”,装完就能用了,或者直接把命令写完时敲完整路径默认在C:\Program Files\Microsoft SQL Server\Client SDK\ODBC下的某个版本文件夹里。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796439.html


