Ubuntu MariaDB日志管理实践
导读:Ubuntu MariaDB日志管理实践 一 日志类型与用途 错误日志 Error Log:记录服务启动、运行、关闭过程中的错误与告警,是排障首选。常见路径为**/var/log/mysql/error.log**。 一般查询日志 Gen...
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),满足合规审计需求。
- 系统层面还可通过journald与rsyslog集中采集服务日志。以上类型与用途是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
- 配置:/etc/mysql/mariadb.conf.d/50-server.cnf
- 一般查询日志(临时开启,排障用)
- 动态:
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 配置后,先备份并在维护窗口重启,验证日志正常输出与轮转。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB日志管理实践
本文地址: https://pptw.com/jishu/777827.html
