Ubuntu下SQL Server日志管理技巧
SQL Server在Ubuntu上的日志文件默认存储在/var/opt/mssql/log/目录下,主要包括:
errorlog(记录SQL Server运行中的错误、警告及启动信息);output.log(记录SQL Server的标准输出内容)。ls /var/opt/mssql/log/命令确认日志文件是否存在,或使用sudo tail -f /var/opt/mssql/log/errorlog实时查看错误日志。tail -f命令实时查看日志文件的最新内容(如错误日志):sudo tail -f /var/opt/mssql/log/errorlog(按Ctrl+C停止);grep命令过滤关键字(如“error”),快速定位问题:sudo grep "error" /var/opt/mssql/log/errorlog。SQL Server的日志会集成到Ubuntu的systemd日志系统中,可通过journalctl命令查看:
sudo journalctl -u mssql-server;sudo journalctl -u mssql-server -b -1(-b -1表示上一次启动)。使用logrotate工具自动轮转、压缩和删除旧日志,避免日志文件占用过多磁盘空间:
sudo apt update && sudo apt install logrotate;/etc/logrotate.d/mssql文件(若不存在则创建),添加以下内容:/var/opt/mssql/log/*.log {
daily # 每天轮转
rotate 7 # 保留7个旧日志文件
compress # 压缩旧日志(如.gz格式)
missingok # 忽略缺失的日志文件
notifempty # 空日志不轮转
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl restart mssql-server > /dev/null 2>&1 || true
endscript
}
保存后,logrotate会每天自动执行轮转任务(也可手动运行sudo logrotate -f /etc/logrotate.d/mssql立即执行)。-- 切换到完整恢复模式(保留事务日志用于恢复)
ALTER DATABASE [YourDBName] SET RECOVERY FULL;
-- 切换到简单恢复模式(自动截断日志)
ALTER DATABASE [YourDBName] SET RECOVERY SIMPLE;
BACKUP LOG [YourDBName] TO DISK = '/var/opt/mssql/backup/YourDBName_Log.bak';
DBCC SHRINKFILE命令收缩(需先备份日志):USE [YourDBName];
DBCC SHRINKFILE (YourDBName_Log, 1); -- 将日志文件缩小到1MB(需替换为实际逻辑日志文件名)
注意:频繁收缩日志可能导致性能下降,建议结合备份策略定期执行。通过rsyslog将SQL Server日志发送到远程日志服务器或指定本地文件,实现集中化管理:
sudo apt install rsyslog;/etc/rsyslog.conf,添加以下内容(将SQL Server日志发送到/var/log/sqlserver.log):if $programname == 'mssql-server' then /var/log/sqlserver.log
& stop
重启rsyslog服务使配置生效:sudo systemctl restart rsyslog。df -h /var/opt/mssql/log/命令监控日志目录的磁盘使用情况,设置阈值告警(如超过80%时触发通知)。