MariaDB在Linux上的日志管理指南
MariaDB的日志管理是数据库运维的重要环节,涵盖日志配置、查看分析、轮转归档、审计增强等多个方面,以下是具体操作步骤:
MariaDB在Linux系统中的日志文件主要存放在/var/log/mysql/(Ubuntu/CentOS均适用)目录下,常见日志类型及默认名称如下:
mariadb.log或error.log;slow.log;mysql-bin.xxxxxx;general.log(默认关闭);audit.log(需手动启用)。MariaDB的日志配置通过修改配置文件实现,主流发行版的配置文件路径为/etc/mysql/mariadb.conf.d/50-server.cnf(Ubuntu/CentOS)或/etc/my.cnf。以下是常见日志的配置示例:
[mysqld]
log_error = /var/log/mysql/mariadb.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 # 记录未使用索引的查询
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server_id = 1 # 主从复制必需,每台服务器需唯一
binlog_format = ROW # 推荐使用ROW格式(记录行变更)
expire_logs_days = 10 # 日志过期天数(自动删除旧日志)
max_binlog_size = 100M # 单个binlog最大大小
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
配置完成后,重启MariaDB服务使设置生效:
sudo systemctl restart mariadb
sudo tail -f /var/log/mysql/mariadb.log
sudo tail -f /var/log/mysql/slow.log
sudo grep 'error' /var/log/mysql/mariadb.log
awk '/2025-09-17/ {count} END {print count}' /var/log/mysql/mariadb.log
若MariaDB日志集成到系统日志(journalctl),可通过以下命令查看:
sudo journalctl -u mariadb # 查看mariadb服务日志
sudo journalctl -u mariadb -f # 实时查看
使用mysqldumpslow工具(MariaDB自带)分析慢查询日志,找出最耗时的查询:
sudo mysqldumpslow -s t /var/log/mysql/slow.log # 按时间排序
sudo mysqldumpslow -s c /var/log/mysql/slow.log # 按次数排序
使用logrotate工具自动轮转、压缩、删除旧日志,配置文件路径为/etc/logrotate.d/mysql。以下是自定义配置示例:
/var/log/mysql/*.log {
daily # 每天轮转
missingok # 若日志文件不存在,不报错
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如.gz格式)
notifempty # 若日志为空,不轮转
create 640 mysql adm # 创建新日志文件,权限640,属主mysql,属组adm
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl restart mariadb # 轮转后重启MariaDB,重新打开日志文件
endscript
}
测试配置文件有效性(模拟轮转):
sudo logrotate -vf /etc/logrotate.d/mysql
检查轮转效果:
ls -lh /var/log/mysql/ # 查看日志文件大小及压缩情况
cat /var/lib/logrotate/status # 查看轮转历史记录
日志审计用于记录数据库操作,便于安全追溯。需安装并配置server_audit插件:
SHOW GLOBAL VARIABLES LIKE 'plugin_dir';
记录plugin_dir的值(如/usr/lib/mysql/plugin/)。
编辑配置文件/etc/mysql/mariadb.conf.d/50-server.cnf,添加以下内容:
[mysqld]
plugin_load_add = server_audit
server_audit_events = connect,query,table # 记录连接、查询、表操作
server_audit_file_rotate_now = on # 立即轮转日志
server_audit_file_rotate_size = 1000000 # 单个日志文件大小(1MB)
server_audit_file_rotations = 5 # 保留5个日志文件
sudo systemctl restart mariadb
sudo tail -f /var/log/mysql/audit.log # 查看审计日志
审计日志会记录用户登录、SQL执行等信息,例如:
2025-09-18 10:00:00,root,localhost,CONNECT,root,127.0.0.1,3306,0
2025-09-18 10:00:01,root,localhost,QUERY,SELECT * FROM users WHERE id=1
通过以上步骤,可实现MariaDB在Linux系统上的全面日志管理,满足故障排查、性能优化及安全审计的需求。