温馨提示×

Ubuntu MariaDB日志管理实践

小樊
34
2025-12-22 13:19:32
栏目: 云计算

Ubuntu MariaDB日志管理实践

一 日志类型与用途

  • 错误日志 Error Log:记录服务启动、运行、关闭过程中的错误与告警,是排障首选。常见路径为**/var/log/mysql/error.log**。
  • 一般查询日志 General Query Log:记录客户端连接与所有SQL,用于审计与问题追踪,性能影响大,通常仅在排障时临时开启。
  • 慢查询日志 Slow Query Log:记录超过阈值的SQL,用于定位性能瓶颈。
  • 二进制日志 Binary Log binlog:记录数据变更,用于主从复制时间点恢复 PITR
  • 中继日志 Relay Log:从库接收主库事件的中继文件。
  • 审计日志 Audit Log:记录关键操作(如登录、DML/DDL),满足合规审计需求。
  • 系统层面还可通过journaldrsyslog集中采集服务日志。以上类型与用途是MariaDB运维的基础。

二 配置与查看常用日志

  • 错误日志
    • 配置:/etc/mysql/mariadb.conf.d/50-server.cnf
      [mysqld]
      log_error = /var/log/mysql/error.log
      log_error_verbosity = 3
    • 查看:
      sudo tail -f /var/log/mysql/error.log
      journalctl -u mariadb -f
  • 一般查询日志(临时开启,排障用)
    • 动态:
      SET GLOBAL general_log = ‘ON’;
      SET GLOBAL general_log_file = ‘/var/log/mysql/general.log’;
    • 永久:
      [mysqld]
      general_log = 1
      general_log_file = /var/log/mysql/general.log
      general_log_output = FILE
  • 慢查询日志
    • 动态:
      SET GLOBAL slow_query_log = ‘ON’;
      SET GLOBAL long_query_time = 2;
      SET GLOBAL slow_query_log_file = ‘/var/log/mysql/slow.log’;
    • 永久:
      [mysqld]
      slow_query_log = 1
      slow_query_log_file = /var/log/mysql/slow.log
      long_query_time = 2
      log_queries_not_using_indexes = 1
  • 二进制日志(用于复制与PITR)
    • 配置:
      [mysqld]
      log_bin = /var/log/mysql/binlog
      binlog_format = ROW
      expire_logs_days = 7
      sync_binlog = 1
  • 审计日志(server_audit)
    • 安装插件:
      INSTALL PLUGIN server_audit SONAME ‘server_audit’;
    • 关键参数:
      SET GLOBAL server_audit_events = ‘connect,query,table’;
      SET GLOBAL server_audit_file_rotate_size = 1073741824; – 1GB
      SET GLOBAL server_audit_file_rotations = 9;
      SET GLOBAL server_audit_logging = ON;
  • 提示:修改配置后执行 sudo systemctl restart mariadb 使其生效。

三 日志轮转与保留策略

  • 使用 logrotate 管理 MariaDB 文本日志(error、general、slow、audit 等)
    • 配置文件:/etc/logrotate.d/mysql(如不存在可新建)
    • 示例:
      /var/log/mysql/*.log {
      daily
      rotate 7
      missingok
      compress
      delaycompress
      notifempty
      create 640 mysql mysql
      sharedscripts
      postrotate
      if test -x /usr/bin/mysqladmin && /usr/bin/mysqladmin ping &>/dev/null; then
      /usr/bin/mysqladmin flush-logs
      fi
      endscript
      }
    • 测试与生效:
      sudo logrotate -vf /etc/logrotate.d/mysql
      cat /var/lib/logrotate/status
    • 说明:logrotate 通常由系统的 /etc/cron.daily/logrotate 每日定时执行。
  • 二进制日志的保留
    • 通过 expire_logs_days(如7天)自动清理过期 binlog,避免磁盘被占满。
  • 手动触发日志轮转
    • mysqladmin flush-logs 或 SQL:FLUSH LOGS。

四 分析与监控实践

  • 慢查询分析
    • 内置:mysqldumpslow /var/log/mysql/slow.log
    • 推荐:pt-query-digest /var/log/mysql/slow.log(Percona Toolkit)
  • 二进制日志回放与定位
    • 查看:mysqlbinlog /var/log/mysql/binlog.000001
    • 按时间:mysqlbinlog --start-datetime=“2025-12-01 00:00:00” --stop-datetime=“2025-12-01 12:00:00” /var/log/mysql/binlog.000001
  • 实时与检索
    • 实时:tail -f /var/log/mysql/error.log
    • 检索:grep -i ‘error’ /var/log/mysql/error.log
  • 审计日志阅读
    • 文本方式直接查看 server_audit.log,按时间、用户、事件类型筛选。

五 安全与合规要点

  • 权限最小化:日志目录与文件建议属主为mysql:adm/mysql:mysql,权限640,仅管理员可读写。
  • 审计范围控制:通过 server_audit_incl_users / server_audit_excl_users 精确包含或排除用户,避免日志噪声。
  • 审计输出方式:生产环境优先使用文件输出并配合 logrotate;若使用 syslog,注意 facility 与隐私合规。
  • 性能权衡:general_log 默认关闭;long_query_time 结合业务选择(如1–2秒);ROW 格式 binlog 更安全但体积更大。
  • 变更留痕:变更 my.cnf 与 logrotate 配置后,先备份并在维护窗口重启,验证日志正常输出与轮转。

0