Linux MariaDB的日志管理策略
小樊
34
2025-11-30 15:33:56
Linux MariaDB 日志管理策略
一 日志类型与用途
- 错误日志 Error Log:记录数据库启动/停止与运行期间的关键错误,是排障首选。可通过变量 log_error 查看实际路径。
- 查询日志 General Log:记录客户端所有连接与SQL,用于审计与问题定位;对性能影响大,生产环境通常关闭或按需临时开启。
- 慢查询日志 Slow Query Log:记录超过 long_query_time 的SQL,用于性能优化;建议长期开启并配合合理阈值。
- 二进制日志 Binary Log binlog:记录会修改数据或结构的事件,用于主从复制与时间点恢复 PITR;需配合备份策略使用。
- 中继日志 Relay Log:仅用于复制从库,保存主库传来的变更事件。
- InnoDB 事务日志 Redo Log:保障事务持久性与崩溃恢复,与性能调优强相关(如 innodb_log_file_size、innodb_log_buffer_size 等)。
二 配置与路径要点
- 常见配置路径(以发行版为准):/etc/mysql/mariadb.conf.d/50-server.cnf 或 /etc/my.cnf.d/;错误日志路径可通过 SHOW VARIABLES LIKE ‘log_error’; 确认。
- 关键配置示例(按需启用与调参):
- 错误日志:
- log_error = /var/log/mysql/error.log
- 查询日志(慎用):
- general_log = 1
- general_log_file = /var/log/mysql/general.log
- 慢查询日志:
- slow_query_log = 1
- long_query_time = 2(单位:秒)
- slow_query_log_file = /var/log/mysql/slow.log
- 二进制日志(用于复制与PITR):
- log_bin = mysql-bin
- binlog_format = ROW(推荐,复制一致性更好)
- server_id = 1(主从复制必需)
- expire_logs_days = 7(保留天数,自动清理)
- 刷新日志:执行 FLUSH LOGS; 或 mysqladmin flush-logs,会滚动部分日志(如 binlog、relay log)。
三 轮转与保留策略
- 系统日志轮转 logrotate(推荐用于 error.log、slow.log、general.log 等文本日志)
- 配置路径:/etc/logrotate.d/mysql(若不存在可新建),全局配置 /etc/logrotate.conf;通常由 /etc/cron.daily/logrotate 每日触发。
- 示例策略(可按需调整):
- /var/log/mysql/*.log {
- daily
- rotate 7
- missingok
- notifempty
- compress
- delaycompress
- create 0640 mysql mysql
- sharedscripts
- postrotate
- systemctl reload mariadb >/dev/null 2>&1 || true
- endscript
- }
- 验证与执行:
- 校验:logrotate -vf /etc/logrotate.d/mysql
- 查看状态:cat /var/lib/logrotate/status
- 二进制日志保留(内置策略)
- 使用 expire_logs_days = N 自动清理过期 binlog;N=0 表示不自动删除。
- 手动清理(确保复制安全与备份完成):
- 按文件名:PURGE BINARY LOGS TO ‘mysql-bin.000003’;
- 按时间:PURGE BINARY LOGS BEFORE ‘2025-11-01 00:00:00’;
- 注意:不要直接用 rm 删除 binlog,否则需同步维护 binlog.index。
四 审计与安全合规
- 启用审计插件 server_audit(MariaDB 10.5+ 常见):
- 检查插件目录:SHOW GLOBAL VARIABLES LIKE ‘plugin_dir’;
- 加载插件:在配置段加入 plugin_load_add = server_audit
- 常用参数:
- server_audit_events = connect,query,table
- server_audit_file_rotate_size = 1000000(约 1MB)
- server_audit_file_rotations = 5
- server_audit_file_rotate_now = on
- 使配置生效:systemctl restart mariadb
- 审计日志建议纳入 logrotate 单独轮转与归档,避免无限增长。
五 监控查看与容量规划
- 实时查看与检索:
- 系统级:journalctl -u mariadb -f
- 错误日志:tail -f /var/log/mysql/error.log
- 关键字检索:grep -i ‘error’ /var/log/mysql/error.log
- 容量与性能要点:
- 避免长期开启 general_log;慢查询日志建议长期开启并合理设置 long_query_time。
- 合理设置 max_binlog_size(如 100M–1G)与 expire_logs_days,既控容量又保障复制/恢复窗口。
- 提升 binlog 持久性:sync_binlog=1(每次事务都 fsync,安全性高,性能略降);通用场景可设为 N>1 平衡性能与持久性。
- 定期演练基于 binlog 的 时间点恢复,验证备份与保留策略有效性。