温馨提示×

Debian上SQL Server的故障排查指南

小樊
34
2025-12-26 10:43:04
栏目: 云计算

Debian上SQL Server故障排查指南

一 快速定位流程

  • 检查服务状态:运行 sudo systemctl status mssql-server,确认服务为 active (running)。若未运行,执行 sudo systemctl start mssql-server 并观察状态输出中的错误提示。
  • 查看系统日志:使用 tail -f /var/log/syslog、journalctl -u mssql-server 或 dmesg 捕捉启动失败、权限、依赖、OOM 等线索。
  • 查看 SQL Server 错误日志:定位引擎启动失败、登录认证、配置错误等,日志位于 /var/opt/mssql/log/errorlog(常见误写为 /var/log/mssql/errorlog)。
  • 验证本地连通:用 sqlcmd 本地直连测试账户与实例可用性,命令示例:sqlcmd -S localhost -U SA -P ‘’。
  • 复核资源与磁盘:执行 df -h、free -m、top/htop,排除磁盘满、内存紧张、CPU 飙升等基础瓶颈。
  • 远程连通性:确认防火墙放行 1433/TCP,并在本机或网关测试端口连通(如 nc -vz 1433)。
  • 变更后重启并复测:sudo systemctl restart mssql-server,再次验证服务与连接。

二 常见故障与修复

  • 服务无法启动
    • 典型原因:配置错误、依赖缺失、端口被占用、磁盘满、内存不足。
    • 处理要点:
      • 查看 /var/opt/mssql/log/errorlog 首屏报错,优先处理“Failed to start”类错误。
      • 用 journalctl -xeu mssql-server 获取更详细的 systemd 失败原因。
      • 复核磁盘与内存:df -h、free -m;必要时清理或扩容。
      • 检查端口占用:ss -lntp | grep 1433 或 netstat -an | grep 1433,释放冲突进程后重启服务。
  • 本地或远程连接失败
    • 本地失败:用 sqlcmd -S localhost -U SA 验证 SA 与实例可用性;若提示登录失败,重置 SA 密码:sudo /opt/mssql/bin/mssql-conf set-sa-password。
    • 远程失败:
      • 防火墙放行:sudo ufw allow 1433/tcp(如使用 ufw);确保云安全组/边界防火墙同样放行。
      • 确认监听端口:默认 1433/TCP,必要时在 mssql-conf 中设置并重启。
      • 客户端指定主机名或 IP:sqlcmd -S <IP或FQDN>,1433 -U SA -P ‘’。
  • 身份验证与权限问题
    • 确保 SA 密码符合强度要求并已正确设置;应用连接字符串中的用户名与密码无误。
    • 如需使用 Windows 身份验证(AD 集成),需完成 Linux 端的 AD/Kerberos 加入与凭据委派配置,否则仅能使用 SQL 身份验证。
  • 依赖与驱动问题(客户端/应用侧)
    • 驱动加载错误时,确认驱动库(如 sqlsrv.so)路径正确,并使用 ldd sqlsrv.so 检查依赖是否缺失;必要时安装对应运行库。
  • SQL Server 代理无法启动
    • 常见为权限或服务账户配置不当;确保以具备 sysadmin 权限的账户运行代理,并在 mssql-conf 或 SSMS 中完成代理启用与账户设置。

三 日志与性能诊断

  • 日志查看与追踪
    • 系统层面:tail -f /var/log/syslog、journalctl -u mssql-server -f、dmesg -T。
    • 引擎层面:tail -n 200 /var/opt/mssql/log/errorlog | less,关注启动、登录、配置变更、备份还原、扩展事件等记录。
  • 性能与阻塞定位
    • 使用 SSMS 的“性能监视器”、SQL Server Profiler 捕获与分析事件(如慢查询、阻塞链)。
    • 查询 DMV 获取实时状态:
      • 连接与会话:sys.dm_exec_connections、sys.dm_exec_sessions
      • 正在执行的请求与等待:sys.dm_exec_requests(结合 sys.dm_exec_sql_text 查看 SQL 文本)
      • 内存压力与分配:sys.dm_os_memory_clerks、DBCC MEMORYSTATUS(在 Linux 上可用,但更推荐 DMV)
  • 资源瓶颈排查
    • CPU/内存/IO:top/htop、vmstat、iostat、free -m、df -h,定位高占用进程与资源不足。
    • 针对高 CPU、内存压力、磁盘 I/O 瓶颈,优先优化查询与索引、调整 max server memory、减少并发冲突与锁等待。

四 常用命令清单

目标 命令示例
服务状态 sudo systemctl status mssql-server
启动/重启服务 sudo systemctl start
查看系统日志 tail -f /var/log/syslog;journalctl -u mssql-server -f
查看引擎错误日志 tail -n 200 /var/opt/mssql/log/errorlog
本地连接测试 sqlcmd -S localhost -U SA -P ‘
远程连接测试 sqlcmd -S <IP或FQDN>,1433 -U SA -P ‘
防火墙放行 sudo ufw allow 1433/tcp
端口占用检查 ss -lntp
资源与磁盘 df -h;free -m;top/htop
重置 SA 密码 sudo /opt/mssql/bin/mssql-conf set-sa-password
依赖检查(驱动) ldd sqlsrv.so

0