在Ubuntu上,SQL Server的日志主要分为以下几类,其默认存储路径需重点掌握:
/var/opt/mssql/log/errorlog。/var/opt/mssql/data/)。/var/opt/mssql/log/output.log。/var/opt/mssql/log/下的子目录。了解这些路径是后续日志查看、管理的基础。
tail命令实时跟踪错误日志的最新内容,按Ctrl+C停止:sudo tail -f /var/opt/mssql/log/errorlog
journalctl命令查询SQL Server服务的日志(支持按时间、关键字过滤):# 查看所有SQL Server相关日志
sudo journalctl -u mssql-server
# 查看上次启动后的日志
sudo journalctl -u mssql-server -b -1
tail命令:sudo tail -f /var/opt/mssql/log/output.log
通过fn_dblog函数可查看事务日志的详细记录(需指定逻辑序列号LSN过滤):
-- 查看所有事务日志记录(前100条)
SELECT TOP 100 * FROM fn_dblog(NULL, NULL);
-- 查看特定时间段的事务(如2025-10-20至2025-10-24)
SELECT * FROM fn_dblog(NULL, NULL)
WHERE [Current LSN] BETWEEN
(SELECT MIN([Current LSN]) FROM fn_dblog(NULL, NULL) WHERE [Operation] = 'LOP_BEGIN_XACT' AND [Transaction Name] = 'YourTransaction')
AND
(SELECT MAX([Current LSN]) FROM fn_dblog(NULL, NULL) WHERE [Operation] = 'LOP_COMMIT_XACT' AND [Transaction Name] = 'YourTransaction');
注意:fn_dblog仅适用于当前数据库,且需有足够权限。
logrotate是Ubuntu系统自带的日志管理工具,可自动轮换、压缩、删除旧日志,防止日志文件过大占用磁盘空间。
/etc/logrotate.d/下新建sqlserver文件,添加以下内容(以错误日志为例):/var/opt/mssql/log/errorlog {
daily # 每天轮换
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(使用gzip)
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮换
create 640 mssql mssql # 创建新日志文件的权限和所有者
sharedscripts # 所有日志轮换完成后执行脚本
postrotate
systemctl restart mssql-server > /dev/null 2>&1 || true
endscript
}
sudo logrotate -f /etc/logrotate.d/sqlserver
rsyslog可将SQL Server日志发送到远程集中式日志服务器(如ELK、Splunk),便于统一管理。
sudo apt-get install rsyslog
sudo systemctl restart rsyslog
/etc/rsyslog.conf,添加以下内容(将SQL Server日志转发到远程服务器192.168.1.100的514端口):if $programname == 'mssql-server' then @192.168.1.100:514
& stop
重启rsyslog使配置生效:sudo systemctl restart rsyslog。恢复模型决定了事务日志的管理方式,需根据业务需求选择:
USE master;
GO
ALTER DATABASE YourDBName SET RECOVERY SIMPLE;
GO
USE master;
GO
ALTER DATABASE YourDBName SET RECOVERY FULL;
GO
BACKUP LOG YourDBName TO DISK = '/var/opt/mssql/backup/YourDBName_Log.bak';
DBCC SHRINKFILE收缩(需指定目标大小,单位为MB):USE YourDBName;
GO
DBCC SHRINKFILE (YourDBName_Log, 100); -- 将日志文件收缩至100MB
注意:频繁收缩日志会导致性能下降,建议结合备份策略定期执行。通过SQL Server代理创建定期任务,自动执行日志备份、收缩等操作:
BACKUP LOG语句。DBCC SHRINKFILE命令。使用第三方工具(如Logwatch、Logalyze)监控日志,生成报告或告警:
/etc/logwatch/conf/services/mssql.conf,设置监控规则(如错误日志中出现“ERROR”时发送邮件告警):sudo apt-get install logwatch
sudo nano /etc/logwatch/conf/services/mssql.conf
添加以下内容:Title = "SQL Server Logs"
Logs = /var/opt/mssql/log/errorlog
*OnlyService = mssql-server
运行Logwatch查看报告:sudo logwatch --service mssql --output mail。