CentOS上SQL Server的故障排查方法
导读:CentOS上SQL Server故障排查方法 一 快速定位流程 检查服务状态:运行命令:sudo systemctl status mssql-server。若未运行,执行:sudo systemctl start mssql-serv...
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 1433或nc -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。
- 客户端连通性:在客户端安装msodbcsql与sqlcmd,用命令测试: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_requests、sys.dm_exec_sessions,定位阻塞进程、长时运行查询与等待类型。
- 查询与执行计划:结合sys.dm_exec_query_stats、sys.dm_exec_plan_attributes分析高成本查询与执行计划问题。
- 扩展事件:创建Extended Events会话,捕获长时间运行SQL、锁竞争等关键事件,便于离线分析。
- 资源瓶颈:用df -h检查磁盘空间,用iostat评估I/O性能,避免因空间不足或I/O抖动引发故障。
四 连接问题专项排查
- 服务端可达性:客户端执行ping 服务器IP;服务器侧确认服务运行与端口监听。
- 端口连通性:客户端执行telnet 服务器IP 1433或nc -vz 服务器IP 1433;不通时复核服务器防火墙与云安全组。
- 远程连接配置:确保**/etc/mssql/mssql.conf.d/90-sqlservr.conf中listen_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 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS上SQL Server的故障排查方法
本文地址: https://pptw.com/jishu/765987.html
