在Ubuntu系统中,SQL Server的日志文件主要分布在以下路径:
/var/opt/mssql/log/errorlog(记录SQL Server实例级别的错误、警告及启动信息);/var/opt/mssql/log/output.log(记录SQL Server服务的标准输出与错误流);journalctl查看与SQL Server服务相关的系统级日志(如服务启动/停止、权限问题等)。journalctl查看系统日志通过journalctl命令可筛选SQL Server服务的日志,支持实时跟踪与时间范围过滤:
# 查看SQL Server服务的所有日志
sudo journalctl -u mssql-server
# 查看上次启动后的日志(-b -1表示上一次启动)
sudo journalctl -u mssql-server -b -1
# 实时跟踪日志(类似tail -f)
sudo journalctl -u mssql-server -f
使用tail命令实时查看错误日志或输出日志,适合快速定位近期问题:
# 实时查看错误日志(默认路径:/var/opt/mssql/log/errorlog)
sudo tail -f /var/opt/mssql/log/errorlog
# 实时查看服务输出日志(默认路径:/var/opt/mssql/log/output.log)
sudo tail -f /var/opt/mssql/log/output.log
安装lnav工具可实现日志的语法高亮、过滤与结构化展示,提升复杂日志的分析效率:
sudo apt install lnav
lnav /var/opt/mssql/log/errorlog # 打开错误日志进行结构化查看
使用logrotate工具自动轮转、压缩与删除旧日志,避免单个日志文件占用过多磁盘空间。SQL Server的日志轮转配置通常位于/etc/logrotate.d/mssql(若不存在可手动创建)。
/etc/logrotate.d/mssql)/var/opt/mssql/log/*.log {
daily # 每日轮转
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(使用gzip)
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 忽略缺失的日志文件
notifempty # 空日志不轮转
create 640 mssql mssql # 创建新日志时的权限与所有者
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl reload mssql-server # 重新加载SQL Server服务以释放文件句柄
endscript
}
若需立即执行轮转(如测试配置),可使用以下命令:
sudo logrotate -f /etc/logrotate.d/mssql
SQL Server的恢复模式决定了事务日志的保留策略,需根据环境选择:
USE master;
GO
ALTER DATABASE [YourDBName] SET RECOVERY SIMPLE;
GO
USE master;
GO
ALTER DATABASE [YourDBName] SET RECOVERY FULL;
GO
当日志文件过大时,可通过以下步骤收缩(需先备份日志,避免数据丢失):
USE [YourDBName];
GO
-- 备份事务日志(FULL模式下必须)
BACKUP LOG [YourDBName] TO DISK = 'NUL'; -- 测试环境可直接备份到NUL(实际生产需备份到文件)
-- 收缩日志文件(将日志文件缩小至1MB)
DBCC SHRINKFILE (N'YourDBName_Log', 1); -- 替换为实际的逻辑日志文件名
GO
结合Logwatch或自定义脚本,定期分析日志中的错误关键词(如“ERROR”“FAILED”),并通过邮件或消息通知管理员:
# 安装Logwatch
sudo apt install logwatch
# 配置Logwatch监控SQL Server日志(编辑/etc/logwatch/conf/services/mssql.conf)
# 示例:添加错误关键词过滤
Title = "SQL Server Logs"
LogFile = /var/opt/mssql/log/errorlog
*OnlyService = mssql-server