温馨提示×

centos sqlserver日志管理方法

小樊
42
2025-12-19 20:07:09
栏目: 云计算

CentOS 上 SQL Server 日志管理实用指南

一 日志类型与存放位置

  • 错误日志与安装/启动日志:位于 /var/opt/mssql/log/,核心文件为 errorlog(历史轮转为 errorlog.1~errorlog.6),同时可查看 setup-*.log 等安装日志。
  • 系统服务日志:通过 journalctl -u mssql-server 查看 systemd 服务日志(启动、崩溃、重启等)。
  • 数据库事务日志文件:数据库 .ldf 文件与数据文件 .mdf 默认同目录,位于 /var/opt/mssql/data/(可在安装后迁移)。
  • 扩展事件与默认跟踪:如 system_health_*.xelHkEngineEventFile_*.xellog_*.trc 等,均在 /var/opt/mssql/log/
  • 目录结构要点:SQL Server on Linux 的主要目录为 /opt/mssql(二进制与工具)与 /var/opt/mssql(数据、日志、配置)。

二 查看与监控日志

  • 查看错误日志:
    • 直接查看最新错误日志:less /var/opt/mssql/log/errorlog
    • 查看服务日志:journalctl -u mssql-server -xe
  • 查看数据库日志空间使用(事务日志容量与已用):
    • sqlcmd -S localhost -U SA -P ‘’ -Q “USE [YourDB]; EXEC sp_spaceused;”
    • sqlcmd -S localhost -U SA -P ‘’ -Q “DBCC SQLPERF(LOGSPACE);”
  • 查看数据库日志文件元信息(路径、大小、增长):
    • sqlcmd -S localhost -U SA -P ‘’ -Q “SELECT name AS LogicalName, physical_name AS PhysicalName, size8/1024 AS SizeMB, max_size8/1024 AS MaxSizeMB, growth*8/1024 AS GrowthMB FROM sys.master_files WHERE type_desc=‘LOG’;”
  • 分析日志内容(高级):在需要时可使用 fn_dblog() 函数分析事务日志内容,定位异常增长来源。

三 事务日志容量控制与备份策略

  • 恢复模式选择:
    • 简单恢复模式:日志在检查点/备份时自动截断,适合无需时间点恢复的场景(开发/低频变更)。
    • 完整恢复模式:需定期日志备份以截断日志并支持 时间点恢复(PITR),适合生产。
    • 大容量日志恢复模式:批量导入时减少日志量,但仍需日志备份,恢复能力受限。
  • 定期日志备份(控制增长的关键):
    • BACKUP LOG [YourDB] TO DISK = ‘/var/opt/mssql/backup/YourDB_Log_$(date +%F_%H%M).bak’ WITH INIT, COMPRESSION;
    • 建议按业务负载设置频率:高事务量可 每数分钟 一次,低事务量可 每日 一次;使用 SQL Server Agent 作业自动化。
  • 收缩日志文件(仅在空间紧张且日志已备份后执行):
    • 先查逻辑日志文件名:SELECT name FROM sys.master_files WHERE database_id = DB_ID(‘YourDB’) AND type_desc=‘LOG’;
    • 收缩到目标大小(如 1GB):DBCC SHRINKFILE (N’YourDB_log’, 1024);
  • 初始大小与增长策略:避免频繁增长,建议固定增量(如 128MB/256MB)并设置合理上限,减少碎片与性能抖动。

四 日志轮转与归档

  • 错误日志轮转:SQL Server 按启动轮转 errorlog → errorlog.1 → …,可通过重启服务触发新日志;历史日志保留数量有限(常见为 6 个)。
  • 系统日志轮转:使用 logrotate 管理 /var/log/mssql/errorlog 等文件(按日/大小轮转、压缩、保留策略),示例:
    • /var/log/mssql/errorlog { daily rotate 7 compress missingok copytruncate delaycompress notifempty }
  • 备份归档:将日志备份按日期分层存放(如 /var/opt/mssql/backup/2025/12/19/),并定期清理过期备份(如保留 30~90 天)。
  • 集中化与可视化:将 journalctlerrorlog 通过 rsyslogELK/Splunk 集中,便于告警与审计。

五 变更日志目录与常见问题处理

  • 迁移日志目录(示例迁移到 /data/mssql):
    • 准备目录并授权:mkdir -p /data/mssql/{data,log,backup}; chown -R mssql:mssql /data/mssql
    • 使用 mssql-conf 修改默认路径:
      • 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
    • 迁移后需重启实例生效。
  • 常见问题与要点:
    • 日志持续增长且无备份:确认处于 完整恢复模式 且已建立 日志备份 计划。
    • 日志无法收缩:存在 长事务/未提交事务 或尚未完成日志备份,先定位并终止长事务,再备份后收缩。
    • 空间告警:优先扩容或增加 日志备份频率,避免频繁小步增长导致碎片。
    • 高可用场景:结合 日志传送(Log Shipping) 或 Always On 可用性组实现日志持续备份与应用,满足 DR/HAPITR 要求。

0