温馨提示×

Ubuntu MariaDB的日志管理怎么做

小樊
34
2025-12-04 19:29:54
栏目: 云计算

Ubuntu MariaDB 日志管理实操指南

一 日志类型与用途

  • 错误日志 Error Log:记录服务启动、运行、关闭过程中的错误与告警,用于故障定位。
  • 一般查询日志 General Query Log:记录客户端连接与所有执行的 SQL,便于审计与排错(性能敏感,通常仅临时开启)。
  • 慢查询日志 Slow Query Log:记录超过阈值的 SQL,用于性能优化。
  • 二进制日志 Binary Log:记录数据变更,用于主从复制时间点恢复 PITR
  • 中继日志 Relay Log:从库接收主库事件的中转日志(复制环境)。
  • 审计日志 Audit Log:记录关键操作(connect、query、table 等),用于安全合规审计。
  • 系统层面还可通过 systemd journalrsyslog 统一收集与转发服务日志。

二 启用与配置各类日志

  • 编辑配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf(或同目录下的 server.cnf)。以下为常用示例(按需启用):
[mysqld]
# 错误日志
log_error = /var/log/mysql/error.log
log_error_verbosity = 3

# 一般查询日志(谨慎开启)
general_log = 0
general_log_file = /var/log/mysql/general.log
general_log_output = FILE

# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# log_queries_not_using_indexes = 1  # 可选:记录未使用索引的查询

# 二进制日志(用于复制与PITR)
log_bin = /var/log/mysql/mariadb-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1

# 中继日志(仅复制从库)
# relay_log = /var/log/mysql/relay.log
  • 动态开关(无需重启,立即生效,持久化仍需写入配置):
-- 一般查询日志
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';

-- 慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
  • 审计日志(server_audit 插件,按需启用):
-- 查看插件目录
SHOW GLOBAL VARIABLES LIKE 'plugin_dir';

-- 在配置文件中加入(50-server.cnf 的 [mysqld] 段)
plugin_load_add = server_audit
server_audit_events = connect,query,table
server_audit_file_rotate_size = 1000000
server_audit_file_rotations = 5
  • 应用配置并重启服务:
sudo systemctl restart mariadb
  • 目录与权限建议:确保日志目录(如 /var/log/mysql)存在且属主为 mysql:adm(Debian/Ubuntu 常见),否则服务可能无法写入。

三 日志轮转与保留策略

  • 使用 logrotate 管理 MariaDB 文本日志(error、general、slow 等):
    • 配置文件:/etc/logrotate.d/mysql(如不存在可新建),示例:
/var/log/mysql/*.log {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    notifempty
    create 640 mysql adm
    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 天),也可手动清理:
-- 登录 MariaDB 执行
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 或按文件名清理
PURGE BINARY LOGS TO 'mariadb-bin.000123';
  • 触发日志轮转的两种方式:
    • SQL:FLUSH LOGS;
    • 命令行:mysqladmin flush-logs。

四 日志查看与分析

  • 实时与检索:
# 查看服务日志(systemd)
journalctl -u mariadb -f

# 实时查看错误日志
tail -f /var/log/mysql/error.log

# 关键字检索
grep -i 'error' /var/log/mysql/error.log
  • 慢查询分析:
# 内置工具
mysqldumpslow /var/log/mysql/slow.log

# Percona Toolkit(更强大)
pt-query-digest /var/log/mysql/slow.log
  • 二进制日志解析与时间范围查看:
mysqlbinlog /var/log/mysql/mariadb-bin.000001

mysqlbinlog \
  --start-datetime="2025-12-01 00:00:00" \
  --stop-datetime="2025-12-01 23:59:59" \
  /var/log/mysql/mariadb-bin.000001
  • 审计日志:直接查看审计插件输出文件(路径由 server_audit_file_path 决定,未显式设置时与 error_log 同目录)。

五 常见问题与排查要点

  • 找不到错误日志:常见路径为 /var/log/mysql/error.log,也可能为 /var/log/mariadb/mariadb.log;如未生成,检查 log_error 配置与目录权限。
  • 权限问题:确保日志目录属主为 mysql:adm,否则 MariaDB 无法写入。
  • 配置不生效:修改 /etc/mysql/mariadb.conf.d/50-server.cnf 后需重启服务;动态变量(如 general_log、slow_query_log)可用 SET GLOBAL 即时生效。
  • 二进制日志过大:设置 expire_logs_days,并定期执行 PURGE BINARY LOGS;确保复制或备份工具(如 xtrabackup、mariabackup)已消费所需 binlog。
  • 审计插件不可用:确认插件存在并已加载(SHOW PLUGINS;),必要时安装 server_audit 插件包。

0