插件窝 干货文章 MariaDB日志的完整指南:审核,配置等

MariaDB日志的完整指南:审核,配置等

日志 Log MariaDB mysql 1003    来源:    2025-03-27

MariaDB日志完整指南:审核与配置

一、MariaDB日志类型概述

MariaDB提供了多种日志类型,每种日志服务于不同的目的:

  1. 错误日志(Error Log):记录服务器启动、运行和关闭过程中的错误信息
  2. 查询日志(General Query Log):记录所有到达MariaDB的查询
  3. 慢查询日志(Slow Query Log):记录执行时间超过指定阈值的查询
  4. 二进制日志(Binary Log):记录所有更改数据的语句,用于复制和时间点恢复
  5. 审计日志(Audit Log):记录服务器活动,用于安全审计
  6. 中继日志(Relay Log):在复制环境中使用,从主服务器接收的二进制日志事件

二、日志配置详解

1. 错误日志配置

-- 查看当前错误日志配置
SHOW VARIABLES LIKE 'log_error';

-- 在my.cnf/my.ini中配置
[mysqld]
log_error = /var/log/mysql/mariadb-error.log
log_error_verbosity = 3  # 1=错误, 2=错误和警告, 3=错误、警告和通知

2. 通用查询日志

-- 临时启用通用查询日志
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/mariadb-query.log';

-- 永久配置(my.cnf)
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mariadb-query.log
log_output = FILE  # 可选FILE或TABLE(存入mysql.general_log表)

3. 慢查询日志

-- 配置慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;  # 超过2秒的查询
SET GLOBAL slow_query_log_file = '/var/log/mysql/mariadb-slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';  # 记录未使用索引的查询

-- my.cnf配置
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

4. 二进制日志配置

-- 二进制日志基本配置
SET GLOBAL log_bin = 'ON';
SET GLOBAL binlog_format = 'ROW';  # ROW, STATEMENT或MIXED
SET GLOBAL expire_logs_days = 7;    # 自动删除7天前的日志

-- my.cnf配置
[mysqld]
log_bin = /var/log/mysql/mariadb-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1  # 每次事务提交都同步到磁盘

三、审计日志配置

MariaDB提供两种审计插件:

1. 服务器审计插件

-- 安装审计插件
INSTALL PLUGIN server_audit SONAME 'server_audit.so';

-- 配置审计选项
SET GLOBAL server_audit_events='CONNECT,QUERY,TABLE';
SET GLOBAL server_audit_logging=ON;
SET GLOBAL server_audit_file_path='/var/log/mysql/audit.log';
SET GLOBAL server_audit_file_rotate_size=1000000;  # 1MB
SET GLOBAL server_audit_file_rotations=9;

-- 永久配置(my.cnf)
[mysqld]
plugin-load-add = server_audit.so
server_audit_events = CONNECT,QUERY,TABLE
server_audit_logging = ON
server_audit_file_path = /var/log/mysql/audit.log
server_audit_file_rotate_size = 1000000
server_audit_file_rotations = 9

2. MariaDB审计插件(企业版)

INSTALL PLUGIN audit SONAME 'audit_plugin.so';

-- 配置示例
SET GLOBAL audit_log_format = JSON;
SET GLOBAL audit_log_file = '/var/log/mysql/audit.json';
SET GLOBAL audit_log_rotate_on_size = 1000000;
SET GLOBAL audit_log_rotations = 5;

四、日志轮转与管理

1. 使用logrotate

创建/etc/logrotate.d/mariadb文件:

/var/log/mysql/mariadb-error.log
/var/log/mysql/mariadb-query.log
/var/log/mysql/mariadb-slow.log {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    notifempty
    create 640 mysql mysql
    postrotate
        # 如果MariaDB正在运行,重新打开日志文件
        if test -x /usr/bin/mysqladmin && \
           /usr/bin/mysqladmin ping &>/dev/null
        then
           /usr/bin/mysqladmin flush-logs
        fi
    endscript
}

2. 手动轮转日志

# 刷新日志(创建新日志文件)
mysqladmin flush-logs

# 或通过SQL
FLUSH LOGS;

五、日志分析与监控

1. 慢查询分析工具

# 使用mysqldumpslow分析慢查询日志
mysqldumpslow /var/log/mysql/mariadb-slow.log

# 使用pt-query-digest(Percona工具包)
pt-query-digest /var/log/mysql/mariadb-slow.log

2. 二进制日志分析

# 查看二进制日志内容
mysqlbinlog /var/log/mysql/mariadb-bin.000001

# 只查看特定时间范围内的日志
mysqlbinlog --start-datetime="2023-01-01 00:00:00" --stop-datetime="2023-01-02 00:00:00" /var/log/mysql/mariadb-bin.000001

3. 错误日志监控

配置监控工具(如Zabbix、Prometheus)来监控错误日志中的关键错误模式。

六、安全最佳实践

  1. 日志文件权限:确保日志文件只能由mysql用户和必要的管理员访问

    chown mysql:mysql /var/log/mysql/*
    chmod 640 /var/log/mysql/*
    
  2. 敏感信息过滤:避免在日志中记录敏感数据

    SET GLOBAL log_raw = OFF;  # 避免记录原始密码
    
  3. 定期审查:建立定期日志审查流程,特别是审计日志

  4. 集中日志管理:考虑使用ELK(Elasticsearch, Logstash, Kibana)等工具集中管理日志

七、常见问题解决

1. 日志文件增长过快

解决方案: - 增加轮转频率 - 调整日志级别(如降低错误日志详细程度) - 过滤不必要的查询(如不记录特定用户的查询)

2. 日志写入性能影响

解决方案: - 对于二进制日志,设置sync_binlog=0(牺牲一些安全性换取性能) - 将日志写入单独的磁盘 - 对于审计日志,减少记录的事件类型

3. 日志不记录

检查步骤: 1. 确认有足够的磁盘空间 2. 检查MariaDB用户对日志目录的写入权限 3. 验证配置是否已加载(SHOW VARIABLES LIKE '%log%') 4. 检查MariaDB错误日志获取线索

通过合理配置和管理MariaDB的各种日志,您可以有效监控数据库活动、排查问题并满足合规性要求。根据您的具体需求调整日志级别和保留策略,平衡性能、存储和安全需求。