Ubuntu上SQL Server日志管理策略
SQL Server在Ubuntu上的日志文件集中存储于/var/opt/mssql/log/目录,主要包括:
errorlog;output.log;.ldf),路径由数据库创建时的配置决定(如/var/opt/mssql/data/YourDB.ldf)。/etc/logrotate.conf,SQL Server专用配置通常在/etc/logrotate.d/mssql(需手动创建)。可通过sudo logrotate -f /etc/logrotate.conf手动触发轮转。/etc/rsyslog.conf,可通过编辑该文件定制SQL Server日志的处理规则。journalctl命令可查看SQL Server相关日志(如sudo journalctl -u mssql-server)。/etc/logrotate.d/mssql文件,添加以下内容定制SQL Server日志轮转策略:/var/opt/mssql/log/*.log {
daily # 每日轮转
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(如gzip)
missingok # 忽略缺失的日志文件
notifempty # 空日志不轮转
create 640 mssql mssql # 新日志文件权限与所有者
}
此配置可实现日志每日轮转、保留7天、压缩旧日志的需求。tail -f /var/opt/mssql/log/errorlog实时查看错误日志的最新内容;journalctl -u mssql-server -f实时查看SQL Server服务的系统日志。SIMPLE或FULL),再执行备份与收缩操作。例如,将数据库YourDB设置为简单恢复模式并收缩日志:USE master;
ALTER DATABASE YourDB SET RECOVERY SIMPLE; -- 简单恢复模式(自动截断日志)
USE YourDB;
DBCC SHRINKFILE (YourDB_Log, 1); -- 收缩日志文件至1MB
注意:TRUNCATE_ONLY选项在SQL Server 2008及以上版本已弃用,需使用上述命令替代。logrotate的maxage参数设置日志保留天数(如maxage 30保留30天),或手动删除旧日志文件(需确认无重要信息)。BACKUP LOG YourDB TO DISK = '/var/opt/mssql/backup/YourDB_Log.bak';
备份后,可通过DBCC SHRINKFILE收缩日志文件(如上述示例)。cron定时任务,定期执行logrotate(默认已通过/etc/cron.daily/logrotate实现每日轮转);Logwatch、Logalyze等工具分析SQL Server日志,识别频繁出现的错误(如连接超时、死锁);通过grep命令过滤关键信息(如sudo grep "error" /var/opt/mssql/log/errorlog),并结合邮件通知(如mailx)实现异常报警。