問題現象:
SQL Server 2022 安裝完成后,數據庫引擎服務無法啟動,日志報錯?“TCP 端口 1433 已被占用”(ERROR_LOG_SYS_TCP_PORT
)。
快速診斷
-
檢測端口占用:
# 查看 1433 端口占用情況(需管理員權限) netstat -ano | findstr ":1433"
-
輸出示例:
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 5678
-
5678
?為占用端口的進程 PID
-
-
-
定位占用進程:
# 根據 PID 查詢進程名稱 tasklist /FI "PID eq 5678"
-
常見沖突進程:舊 SQL Server 實例、Docker 容器、第三方應用(如 Redis、VPN 服務)
-
解決方案
步驟 1:終止占用進程(臨時解決)
-
通過 PID 強制終止進程:
taskkill /PID 5678 /F
-
若為 Docker 容器占用:
docker ps | findstr "1433" # 查找容器 docker stop <容器ID> # 停止容器
步驟 2:修改 SQL Server 監聽端口(永久解決)
-
使用 SQL Server 配置管理器:
-
打開?SQL Server 配置管理器 > SQL Server 網絡配置 > 協議
-
右鍵 TCP/IP 協議,選擇?屬性 > IP 地址,將?
TCP 端口
?從 1433 改為?51433 -
重啟 SQL Server 服務
-
-
通過 T-SQL 修改(推薦腳本化):
EXEC sys.sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sys.sp_configure 'listen all', 0; -- 禁用監聽所有 IP EXEC sys.sp_configure 'port', 51433; -- 設置新端口 RECONFIGURE WITH OVERRIDE;
-
重啟 SQL Server 服務:
Restart-Service -Name "MSSQLSERVER" -Force
-
步驟 3:配置防火墻放行新端口
-
開放 Windows 防火墻規則:
New-NetFirewallRule -DisplayName "SQL Server 51433" -Direction Inbound -Protocol TCP -LocalPort 51433 -Action Allow
驗證與日志分析
-
確認端口修改生效:
# 查看新端口監聽狀態 netstat -ano | findstr ":51433"
-
預期輸出:
LISTENING
?狀態且進程 PID 為 SQL Server 服務
-
-
檢查錯誤日志:
-
日志路徑:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG
-
搜索關鍵詞?
Server is listening on [ 'any' <ipv4> 51433 ]
-
擴展場景:動態端口沖突處理
-
問題描述:SQL Server 動態端口(如 1434)與其他服務沖突
-
解決方案:
-
修改 SQL Browser 服務的動態端口范圍:
EXEC sys.sp_configure 'remote admin connections', 1; EXEC sys.sp_configure 'remote access', 0; -- 禁用動態端口分配 RECONFIGURE;
-
手動指定靜態端口:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp\" -Name "TcpPort" -Value "51433"
-
通過以上步驟,可徹底解決端口沖突問題。若需恢復默認端口,需確保 1433 未被占用并反向操作配置。生產環境中建議使用非默認端口(如 51433)以提高安全性。