Ubuntu上SQL Server的故障排查指南
导读:Ubuntu上SQL Server故障排查指南 一 快速定位流程 检查服务状态:运行 sudo systemctl status mssql-server,若未运行则执行 sudo systemctl start mssql-server...
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 传送延迟,定位网络与重做瓶颈。
- SELECT
五 实践建议
- 变更前备份关键配置与数据;修改内存/端口等参数后务必重启服务并复核日志。
- 生产环境避免使用 trustServerCertificate=true,正确部署与轮换 TLS 证书。
- 保持 SQL Server 与驱动(如 ODBC)版本更新,及时修复已知缺陷。
- 若所有排查无果,保留错误日志、core dump 与复现步骤,向社区或厂商支持提交工单。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上SQL Server的故障排查指南
本文地址: https://pptw.com/jishu/748323.html
