CentOS 上 SQL Server 日志管理实操指南
一 日志类型与存放路径
- 错误日志与启动日志:位于 /var/opt/mssql/log/errorlog,并按序号轮转生成 errorlog.1、errorlog.2 …。这些文件记录了 SQL Server 引擎启动、错误与告警信息。
- 系统日志(服务层面):通过 journalctl -u mssql-server 查看 systemd 服务日志,便于排查服务启动失败、崩溃重启等问题。
- 数据库事务日志文件:每个用户数据库的日志文件为 .ldf,默认与数据文件同目录(常见为 /var/opt/mssql/data/),文件名与数据库名对应。
- 扩展事件与诊断日志:如 system_health_*.xel、HkEngineEventFile_*.xel 等,用于性能与故障诊断。
二 查看与监控日志
- 查看错误日志(文件):
- 实时跟踪:tail -f /var/opt/mssql/log/errorlog
- 分页查看:less /var/opt/mssql/log/errorlog
- 查看服务日志(systemd):
- 查看全部:journalctl -u mssql-server
- 实时跟踪:journalctl -u mssql-server -f
- 查看数据库日志空间使用(T-SQL):
- 连接实例后执行:USE [YourDatabaseName]; DBCC SQLPERF(LOGSPACE);
- 查看数据库恢复模型(决定日志是否可截断):
- SELECT name, recovery_model_desc FROM sys.databases;
- 查看日志文件与大小(T-SQL):
- 执行:EXEC sp_helpfile;(在目标数据库上下文)
三 事务日志维护与截断
- 前提与原则:
- 仅当数据库恢复模型为 FULL 或 BULK_LOGGED 时,事务日志备份才会触发“可恢复”的日志截断;SIMPLE 模式会在检查点自动截断,无需日志备份。
- 日志备份与截断(示例):
- 备份到文件(推荐,用于可恢复与归档):
- BACKUP LOG [YourDatabaseName] TO DISK = ‘/var/opt/mssql/backup/YourDB_2025-12-25.trn’ WITH FORMAT, INIT;
- 仅用于测试或临时释放空间(不保留日志链,生产慎用):
- BACKUP LOG [YourDatabaseName] TO DISK = ‘NUL’;
- 自动化:
- 在 SQL Server Agent 中创建作业,按业务 RPO 设置频率(如每 5–15 分钟一次),并配置保留策略(定期清理过期 .trn)。
- 收缩日志文件(仅在日志已备份/可截断后进行,避免频繁收缩):
- 查看逻辑日志文件名:EXEC sp_helpfile;(记下日志逻辑名,如 YourDB_log)
- 收缩到指定大小(MB):
- USE [YourDatabaseName];
- DBCC SHRINKFILE (N’YourDB_log’, 4096); – 单位 MB
- 重要提示:
- 频繁或激进收缩会导致 VLF 激增与性能下降,优先通过合理的日志备份频率控制日志大小。
四 日志轮转与归档清理
- 错误日志轮转:SQL Server 会自动轮转 errorlog,旧文件以序号保存;可按需压缩归档历史 errorlog.*.gz 并清理超期文件(确保保留足够回溯周期)。
- 事务日志备份归档:
- 使用 Linux 定时任务或备份软件将 /var/opt/mssql/backup/*.trn 归档至对象存储/异地,并按保留策略删除本地旧文件。
- 系统日志轮转:
- 配置 journald 的 MaxRetentionSec、MaxFileSec 或使用 logrotate 对 journal 与 errorlog 做统一轮转与压缩。
- 目录规划:
- 建议将备份与日志分离,如:/var/opt/mssql/backup(备份)、/var/opt/mssql/log(错误日志)、/var/opt/mssql/data(数据/日志文件)。
五 变更日志目录与集中监控
- 变更日志目录(mssql-conf):
- 通过 mssql-conf 可修改错误日志、数据文件、日志文件的默认目录,例如:
- 设置错误日志目录:sudo /opt/mssql/bin/mssql-conf set filelocation.errorlogdir /data/mssql/log
- 设置默认数据目录:sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /data/mssql/data
- 设置默认日志目录:sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /data/mssql/log
- 修改后需重启服务:sudo systemctl restart mssql-server
- 集中监控与审计:
- 将 errorlog 与 journalctl 输出接入 rsyslog/ELK(Elasticsearch、Logstash、Kibana)/Splunk,实现检索、告警与可视化。