温馨提示×

CentOS环境下SQL Server的故障排查方法是什么

小樊
35
2025-11-14 06:25:01
栏目: 云计算

CentOS 上 SQL Server 故障排查步骤

一 快速定位流程

  • 检查服务状态:运行 systemctl status mssql-server,若未运行则执行 systemctl start mssql-server 启动服务。
  • 查看错误日志:优先检查 /var/log/mssql/errorlog,并用 journalctl -u mssql-server 查看服务启动与运行日志。
  • 校验网络连通:用 ping 测试主机可达,用 telnet 服务器IP 1433nc -zv 服务器IP 1433 验证 1433 端口是否开放。
  • 复核配置与权限:确认 /etc/mssql/mssql.conf.d/90-sqlservr.conflisten_addresses=0.0.0.0;必要时修复目录权限 chown -R mssql:mssql /var/opt/mssql
  • 客户端侧验证:安装并使用 sqlcmd/msodbcsql 本地连接测试,排除应用侧连接字符串问题。

二 常见故障与处理

  • 服务无法启动:查看 /var/log/mssql/errorlogjournalctl 的错误细节;若因断电等异常导致可疑数据文件状态,可在维护时段以单用户模式启动进行诊断:sudo /opt/mssql/bin/sqlservr -m,观察控制台输出后再决定修复路径。
  • 端口与防火墙:确保防火墙放行 1433/tcpfirewall-cmd --zone=public --add-port=1433/tcp --permanent && firewall-cmd --reload;云主机还需检查安全组规则。
  • 监听地址与端口:在 /etc/mssql/mssql.conf.d/90-sqlservr.conf 设置 listen_addresses=0.0.0.0 以监听所有接口,必要时重启服务使配置生效。
  • SELinux 限制:执行 getenforce 检查状态;仅用于排查时可临时设为宽容模式 sudo setenforce 0,确认后再恢复为 Enforcing 并配置正确的策略。
  • 客户端连接失败:核对连接字符串的 服务器地址、端口、数据库名、用户名、密码;在服务器本机用 sqlcmd -S localhost -U SA 验证凭据与网络;远程用 sqlcmd -S 服务器IP,1433 -U SA 测试。
  • DNS 与解析:必要时在 /etc/hosts 建立 hostname-IP 映射,或在 /etc/resolv.conf 调整 nameserver 以排除解析异常。

三 性能与阻塞排查

  • 活跃会话与请求:查询 sys.dm_exec_sessionssys.dm_exec_requests,定位长时间运行或阻塞会话。
  • 查询与执行计划:结合 sys.dm_exec_query_statssys.dm_exec_plan_attributes 分析高成本查询与计划属性,进行索引与语句优化。
  • 活动监控:在 SSMS 使用“活动监视器”快速查看当前进程、等待类型与阻塞链。
  • 扩展事件:创建扩展事件会话,捕获长时SQL锁竞争等关键事件,便于离线分析。

四 日志与诊断信息获取

  • 错误日志与系统日志:SQL Server 错误日志位于 /var/log/mssql/errorlog;服务日志使用 journalctl -u mssql-server 查看。
  • 客户端工具:安装 mssql-toolsunixODBC-devel,并将 /opt/mssql-tools/bin 加入 PATH,便于使用 sqlcmd 进行本地诊断与验证。
  • 连接验证命令示例:
    • 本地:**sqlcmd -S localhost -U SA -P ‘<密码>’ -Q “SELECT 1”`
    • 远程:sqlcmd -S 服务器IP,1433 -U SA -P ‘<密码>’ -Q “SELECT 1”
  • 应用侧线索:同步收集应用日志与错误堆栈,与数据库侧日志交叉验证。

五 安全与变更建议

  • 最小权限原则:避免使用 SA 进行日常连接,创建具备所需权限的专用登录与应用角色。
  • 变更可回滚:修改 mssql.conf 前先备份;变更后使用 systemctl restart mssql-server 重启并观察日志。
  • 谨慎修复数据:仅在明确故障且具备有效备份的前提下执行 DBCC CHECKDB … REPAIR_ALLOW_DATA_LOSS,优先尝试无损修复与从备份恢复。
  • 加固与安全组:生产环境保持 SELinux Enforcing,仅开放必要端口;云上同时配置安全组白名单。

0