MariaDB提供了多种日志类型,每种日志服务于不同的目的:
-- 查看当前错误日志配置
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=错误、警告和通知
-- 临时启用通用查询日志
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表)
-- 配置慢查询日志
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
-- 二进制日志基本配置
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提供两种审计插件:
-- 安装审计插件
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
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;
创建/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
}
# 刷新日志(创建新日志文件)
mysqladmin flush-logs
# 或通过SQL
FLUSH LOGS;
# 使用mysqldumpslow分析慢查询日志
mysqldumpslow /var/log/mysql/mariadb-slow.log
# 使用pt-query-digest(Percona工具包)
pt-query-digest /var/log/mysql/mariadb-slow.log
# 查看二进制日志内容
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
配置监控工具(如Zabbix、Prometheus)来监控错误日志中的关键错误模式。
日志文件权限:确保日志文件只能由mysql用户和必要的管理员访问
chown mysql:mysql /var/log/mysql/*
chmod 640 /var/log/mysql/*
敏感信息过滤:避免在日志中记录敏感数据
SET GLOBAL log_raw = OFF; # 避免记录原始密码
定期审查:建立定期日志审查流程,特别是审计日志
集中日志管理:考虑使用ELK(Elasticsearch, Logstash, Kibana)等工具集中管理日志
解决方案: - 增加轮转频率 - 调整日志级别(如降低错误日志详细程度) - 过滤不必要的查询(如不记录特定用户的查询)
解决方案:
- 对于二进制日志,设置sync_binlog=0
(牺牲一些安全性换取性能)
- 将日志写入单独的磁盘
- 对于审计日志,减少记录的事件类型
检查步骤:
1. 确认有足够的磁盘空间
2. 检查MariaDB用户对日志目录的写入权限
3. 验证配置是否已加载(SHOW VARIABLES LIKE '%log%'
)
4. 检查MariaDB错误日志获取线索
通过合理配置和管理MariaDB的各种日志,您可以有效监控数据库活动、排查问题并满足合规性要求。根据您的具体需求调整日志级别和保留策略,平衡性能、存储和安全需求。