温馨提示×

Linux上SQL Server故障如何排查

小樊
44
2025-09-20 12:38:35
栏目: 云计算

1. 检查SQL Server服务状态
使用systemctl命令确认SQL Server服务是否正在运行。若未运行,启动服务并检查状态:

sudo systemctl status mssql-server --no-pager # 查看服务状态 sudo systemctl start mssql-server # 启动服务(若未运行) 

2. 查看SQL Server错误日志
SQL Server的错误日志是排查故障的核心线索,位于/var/opt/mssql/log/errorlog。使用以下命令查看日志内容(需root权限):

sudo cat /var/opt/mssql/log/errorlog # 直接查看日志 sudo tail -f /var/opt/mssql/log/errorlog # 实时跟踪日志更新 

若日志文件编码为UTF-16,可使用iconv转换为UTF-8便于阅读:

sudo iconv -f UTF-16LE -t UTF-8 /var/opt/mssql/log/errorlog -o /tmp/errorlog_utf8 cat /tmp/errorlog_utf8 

3. 验证网络连接与端口访问

  • 本地连接测试:若无法通过localhost连接,尝试使用127.0.0.1(避免localhost未正确映射);
  • IP地址确认:使用ip addr show eth0(Ubuntu/Debian)或ip addr show ens33(CentOS/RHEL)获取服务器IP;
  • 端口开放检查:SQL Server默认端口为1433,使用ufw(Ubuntu)或firewalld(CentOS)确认端口是否开放:
    sudo ufw status | grep 1433 # Ubuntu查看端口状态 sudo firewall-cmd --list-ports | grep 1433 # CentOS查看端口状态 
    若未开放,添加规则:
    sudo ufw allow 1433/tcp # Ubuntu开放端口 sudo firewall-cmd --add-port=1433/tcp --permanent && sudo firewall-cmd --reload # CentOS开放端口 

4. 检查系统资源占用
使用tophtopfree -h命令监控系统资源(CPU、内存、磁盘),确认是否存在资源瓶颈:

top # 实时查看CPU/内存使用率 free -h # 查看内存及交换分区使用情况 df -h # 查看磁盘空间占用 

若内存不足,可通过mssql-conf调整SQL Server内存限制(如限制最大内存为4GB):

sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096 sudo systemctl restart mssql-server 

5. 分析崩溃转储文件
若SQL Server异常崩溃,可检查/var/opt/mssql/log目录下的转储文件(.mdmp为SQL Server转储,.tar.gz2为核心转储),定位崩溃原因:

ls -lh /var/opt/mssql/log/*.mdmp # 查看SQL Server转储文件 ls -lh /var/opt/mssql/log/*.tar.gz2 # 查看核心转储文件 

转储文件可使用SQL Server工具(如sqldump)或第三方工具(如WinDbg)分析。

6. 验证身份验证与权限

  • 密码检查:确保用户名(如sa)和密码正确,注意密码大小写敏感及特殊字符(如$需转义为\$);
  • sa账户重置:若忘记sa密码,可通过以下命令重置:
    sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup # 按提示重置sa密码 sudo systemctl start mssql-server 

7. 检查系统日志
使用journalctl查看系统日志,获取与SQL Server相关的系统级错误(如权限问题、依赖库缺失):

journalctl -xe | grep mssql # 过滤SQL Server相关日志 journalctl -u mssql-server -b # 查看SQL Server服务启动日志 

8. 处理常见配置问题

  • 主机名过长:若安装时出现“Hostname must be 15 characters or less”错误,需修改/etc/hostname/etc/hosts中的主机名(缩短至15字符内),并重启服务器;
  • 依赖库缺失:若安装时提示error while loading shared libraries,安装缺失的库(如libldap-2.4-2libssl1.1):
    sudo apt install libldap-2.4-2 libssl1.1 # Ubuntu/Debian sudo yum install openldap-clients openssl # CentOS/RHEL 

9. 使用SQL Server工具辅助排查

  • sqlcmd:通过命令行工具执行SQL查询,检查数据库状态或修复问题(如连接数据库、查询DMV):
    sqlcmd -S localhost -U sa -P 'YourPassword' -Q "SELECT name, state_desc FROM sys.databases" 
  • 扩展事件:通过SQL命令查询扩展事件,获取性能或错误详情(如查询慢、死锁):
    SELECT * FROM sys.fn_xe_file_target_read_file('system_health*.xel', NULL, NULL, NULL); 

10. 重新配置SQL Server
若配置错误(如修改了数据目录、端口),可使用mssql-conf重新配置:

sudo /opt/mssql/bin/mssql-conf setup # 重新配置实例(会重置部分设置) sudo systemctl restart mssql-server 

注意:重新配置会清除现有配置,需提前备份重要数据。

0