温馨提示×

CentOS上SQL Server的故障排查方法

小樊
37
2025-12-07 22:39:33
栏目: 云计算

CentOS上SQL Server故障排查方法

一 快速定位流程

  • 检查服务状态:运行命令:sudo systemctl status mssql-server。若未运行,执行:sudo systemctl start mssql-server;必要时设置开机自启:sudo systemctl enable mssql-server
  • 查看错误日志:SQL Server错误日志默认在:/var/log/mssql/errorlog;系统日志用:journalctl -u mssql-server -xe。优先从日志中提取首次报错错误码
  • 校验网络连通与端口:对服务器做ping;用telnet 服务器IP 1433nc -vz 服务器IP 1433确认端口开放与监听。
  • 复核监听地址与端口:在配置文件**/etc/mssql/mssql.conf.d/90-sqlservr.conf中确保listen_addresses=0.0.0.0**(监听所有接口),端口为1433;修改后重启服务。
  • 防火墙放行:执行:sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent && sudo firewall-cmd --reload
  • 权限与所有权:确保数据目录属主正确:sudo chown -R mssql:mssql /var/opt/mssql
  • 客户端连通性:在客户端安装msodbcsqlsqlcmd,用命令测试:sqlcmd -S 服务器IP,1433 -U SA -P ‘密码’ -Q “SELECT 1”

二 常见故障与修复

  • 服务反复崩溃或启动失败(ABRT):查看journalctl -u mssql-server;若日志出现“Unable to read instance_id from /var/opt/mssql/.system/instance_id”,先备份该文件后删除,再启动服务,系统会自动生成新的instance_id
  • 断电或异常关机后的启动异常:先停止服务,再以单用户模式前台启动观察:sudo /opt/mssql/bin/sqlservr -m;如需修复数据库,使用:sudo /opt/mssql/bin/sqlcmd -S localhost -U SA -Q “DBCC CHECKDB (‘数据库名’) REPAIR_ALLOW_DATA_LOSS”(仅在明确风险且做好备份后执行)。
  • 权限或注册表文件导致崩溃:若日志出现“Access was denied setting up the persistent registry: \SystemRoot\licensing.hiv”,先彻底停止服务并清理残留进程(如:sudo pkill -9 -f “sqlservr|paldumper”),再修复目录权限:sudo chown -R mssql:mssql /var/opt/mssql/,随后启动服务。
  • 端口未监听或监听地址错误:确认配置listen_addresses=0.0.0.0与端口1433;如仍不通,复核防火墙与云安全组策略是否放行1433/tcp

三 性能与阻塞排查

  • 实时会话与请求:在SSMS或sqlcmd中查询动态管理视图(DMV):sys.dm_exec_requestssys.dm_exec_sessions,定位阻塞进程长时运行查询等待类型
  • 查询与执行计划:结合sys.dm_exec_query_statssys.dm_exec_plan_attributes分析高成本查询执行计划问题。
  • 扩展事件:创建Extended Events会话,捕获长时间运行SQL锁竞争等关键事件,便于离线分析。
  • 资源瓶颈:用df -h检查磁盘空间,用iostat评估I/O性能,避免因空间不足或I/O抖动引发故障。

四 连接问题专项排查

  • 服务端可达性:客户端执行ping 服务器IP;服务器侧确认服务运行与端口监听。
  • 端口连通性:客户端执行telnet 服务器IP 1433nc -vz 服务器IP 1433;不通时复核服务器防火墙与云安全组。
  • 远程连接配置:确保**/etc/mssql/mssql.conf.d/90-sqlservr.conflisten_addresses=0.0.0.0**,并重启服务。
  • 认证与权限:确认登录账号存在、未被锁定且具备相应权限;核对SA或域/本地账户凭据。
  • 连接字符串:校验服务器地址、端口、数据库名、用户名、密码等参数;必要时在连接字符串中显式指定1433端口。

五 日志与诊断命令速查

目标 命令或路径 要点
服务状态 systemctl status mssql-server 关注Active状态与Recent logs
系统日志 journalctl -u mssql-server -xe 查看启动细节与权限/断言类错误
SQL错误日志 cat /var/log/mssql/errorlog 定位首次报错错误码
监听地址 /etc/mssql/mssql.conf.d/90-sqlservr.conf 设置listen_addresses=0.0.0.0
防火墙放行 firewall-cmd --zone=public --add-port=1433/tcp --permanent && firewall-cmd --reload 开放1433/tcp
端口连通 telnet 服务器IP 1433 或 nc -vz 服务器IP 1433 验证端口开放监听
权限修复 chown -R mssql:mssql /var/opt/mssql 修复数据目录属主
单用户前台 /opt/mssql/bin/sqlservr -m 异常后前台观察启动报错
客户端连通 sqlcmd -S 服务器IP,1433 -U SA -P ‘密码’ -Q “SELECT 1” 快速验证凭据与网络
残留进程清理 ps -ef grep -E "sqlservr

0