首页 >
问答 >
云计算 >
Ubuntu上SQL Server的故障排查指南
Ubuntu上SQL Server的故障排查指南
小樊
34
2025-11-14 12:30:18
Ubuntu上SQL Server故障排查指南
一 快速定位流程
检查服务状态:运行 sudo systemctl status mssql-server,若未运行则执行 sudo systemctl start mssql-server。
查看引擎日志:优先查看 SQL Server 错误日志,常见路径为 /var/opt/mssql/log/errorlog ;也可用 sudo journalctl -u mssql-server -xe 获取更详细的系统级日志。
验证本地连通:使用 sqlcmd 本地连接,例如:sqlcmd -S 127.0.0.1 -U SA -P ‘<YourStrong!Passw0rd>’ -Q “SELECT 1”。
检查端口监听:确认 1433 端口处于监听,命令:ss -lntp | grep 1433 或 sudo netstat -tulpen | grep 1433。
复核资源与权限:确保磁盘与内存充足,且 SQL Server 目录权限正确。
以上步骤覆盖了服务、日志、连通、端口与资源的首轮排查要点。
二 常见故障与修复
服务无法启动
查看错误日志定位根因:cat /var/opt/mssql/log/errorlog;必要时用 journalctl -u mssql-server -xe 辅助排查。
资源不足(磁盘/内存)会导致启动失败或异常退出,先释放或扩容,再重启服务。
配置值不当(如内存、文件路径)可阻碍启动,可在“最低配置模式”下修正后重启:
sudo /opt/mssql/bin/mssql-conf set-sa-password
sudo /opt/mssql/bin/mssql-conf set network.tcpport 1433
sudo systemctl restart mssql-server
端口被占用
查找占用进程:ss -lntp | grep 1433 或 sudo lsof -iUDP:1433 -iTCP:1433;必要时 kill -9 释放端口,再重启服务。
连接被拒绝或超时
本机优先用 127.0.0.1 测试,排除 localhost 解析问题;远程连接请确保客户端能解析服务器名或直接使用 IP。
防火墙放行:sudo ufw allow 1433/tcp(或 firewalld/iptables 等效规则)。
核对认证信息(用户名/密码/大小写/空格),确认 SQL Server 已启用混合身份验证。
SSL/TLS 握手失败
连接字符串增加加密选项进行验证:encrypt=true; trustServerCertificate=true(仅测试环境建议)。
检查证书是否有效、未过期;必要时重新生成或调整证书配置。
依赖库缺失(安装或启动时报错)
典型如:error while loading shared libraries: liblber-2.4.so.2 或 libssl1.1,使用 apt 安装对应包(如 libldap-2.4-2、libssl1.1),再重启服务。
Docker 场景
确认 Docker 运行,拉取镜像:docker pull mcr.microsoft.com/mssql/server:2022-latest;
启动容器时确保环境变量 ACCEPT_EULA=Y 、MSSQL_SA_PASSWORD 合规,且主机端口映射正确:-p 1433:1433。
以上为高频故障的处置要点与命令示例。
三 日志与诊断命令清单
服务与系统日志:
sudo systemctl status mssql-server --no-pager
sudo journalctl -u mssql-server -xe
SQL Server 引擎日志:
tail -f /var/opt/mssql/log/errorlog
grep -i “error|fail|exception” /var/opt/mssql/log/errorlog
端口与进程:
ss -lntp | grep 1433
sudo lsof -i :1433
资源与健康:
df -h(确保可用空间≥2GB )
free -h(确保可用内存≥2GB )
top/htop/vmstat/iostat 观察 CPU、内存、I/O 瓶颈
配置与连通性验证:
查看/调整内存:sudo sqlcmd -Q “EXEC sp_configure ‘max memory’, 4096; RECONFIGURE;”
本地连通:sqlcmd -S 127.0.0.1 -U SA -P ‘’ -Q “SELECT @@VERSION”
这些命令覆盖了日志、端口、资源、配置与连通性的常用诊断路径。
四 性能与高可用排查
资源瓶颈定位:结合 top/htop、vmstat、iostat、netstat 识别 CPU、内存、磁盘 I/O 与网络异常。
查询与执行计划:利用 SSMS 的 SQL Server Profiler 、数据库引擎优化顾问 抓取与优化慢查询。
可用性组延迟观测(如部署 AG):
SELECT
ar.replica_server_name,
ar.availability_mode_desc,
DB_NAME(dbr.database_id) AS db,
dbr.synchronization_state_desc,
ISNULL(CASE dbr.redo_rate WHEN 0 THEN -1 ELSE CAST(dbr.redo_queue_size AS FLOAT)/dbr.redo_rate END, -1) AS redo_latency_sec,
ISNULL(CASE dbr.log_send_rate WHEN 0 THEN -1 ELSE CAST(dbr.log_send_queue_size AS FLOAT)/dbr.log_send_rate END, -1) AS log_send_latency_sec,
dbr.redo_queue_size, dbr.redo_rate, dbr.log_send_queue_size, dbr.log_send_rate
FROM master.sys.availability_replicas AS ar
JOIN master.sys.dm_hadr_database_replica_states AS dbr
ON ar.replica_id = dbr.replica_id AND ar.group_id = dbr.group_id;
该脚本有助于快速判断 Redo 延迟 与 Log 传送延迟 ,定位网络与重做瓶颈。
五 实践建议
变更前备份关键配置与数据;修改内存/端口等参数后务必重启服务并复核日志。
生产环境避免使用 trustServerCertificate=true,正确部署与轮换 TLS 证书。
保持 SQL Server 与驱动(如 ODBC)版本更新,及时修复已知缺陷。
若所有排查无果,保留错误日志、core dump 与复现步骤,向社区或厂商支持提交工单。