SQL Server在Ubuntu上的日志文件主要分布在两个目录:
/var/opt/mssql/log/errorlog,记录SQL Server启动、运行中的错误及警告信息。/var/opt/mssql/data/),文件名为数据库名_Log.ldf,记录所有事务的详细信息,是数据恢复的关键。journalctl命令过滤SQL Server相关日志,-f参数实现实时跟踪:sudo journalctl -u mssql-server -f # 实时查看SQL Server系统日志
sudo tail -f /var/opt/mssql/log/errorlog # 直接查看错误日志文件
/var/opt/mssql/log/output.log记录SQL Server启动及后台进程信息,使用tail命令实时查看:sudo tail -f /var/opt/mssql/log/output.log
安装lnav(日志导航工具)实现更高效的日志分析,支持语法高亮、过滤及搜索:
sudo apt install lnav # 安装lnav
lnav /var/opt/mssql/log/errorlog # 打开错误日志进行结构化查看
SQL Server的恢复模式决定了日志的增长行为,需根据环境选择:
USE master;
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE; -- 切换至简单模式
USE master;
ALTER DATABASE [数据库名] SET RECOVERY FULL; -- 切换至完整模式
BACKUP LOG [数据库名] TO DISK = 'NUL'; -- 截断日志(NUL表示丢弃日志)
使用DBCC SHRINKFILE命令收缩日志文件,需指定日志文件的逻辑名称(可通过sp_helpdb查询):
USE [数据库名];
DBCC SHRINKFILE (日志文件逻辑名, 目标大小(MB)); -- 例如收缩至100MB
注意:频繁收缩日志会导致性能下降,建议仅在日志过大时执行。
logrotate是Linux系统自带的日志轮转工具,可自动压缩、删除旧日志,防止日志文件过大。
/etc/logrotate.d/mssql-server文件,添加以下内容:/var/opt/mssql/log/errorlog {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志
delaycompress # 延迟压缩(保留最近1天不压缩)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
postrotate
systemctl restart mssql-server # 轮转后重启SQL Server以重新打开日志文件
endscript
}
sudo logrotate -f /etc/logrotate.d/mssql-server
结合sqlcmd工具,通过crontab设置定时任务,定期备份事务日志(适用于完整/差异恢复模式):
# 编辑当前用户的crontab
crontab -e
添加以下内容(每天凌晨2点备份日志):
0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourPassword' -Q "BACKUP LOG [数据库名] TO DISK = '/var/opt/mssql/backups/$(date +\%Y\%m\%d)_log.bak' WITH INIT;"
通过grep命令快速查找日志中的错误或特定事件(如“error”“failed”):
sudo grep -i "error" /var/opt/mssql/log/errorlog # 查找错误日志中的错误信息
Logwatch是一款日志分析工具,可自动生成每日日志报告,包含SQL Server错误统计:
sudo apt install logwatch # 安装Logwatch
sudo logwatch --service mssql-server --output mail # 发送邮件报告(需配置邮件服务)
df -h命令检查磁盘空间,确保日志目录有足够空间。