首页 >
问答 >
云计算 >
Ubuntu MariaDB日志管理实践
Ubuntu MariaDB日志管理实践
小樊
34
2025-12-22 13:19:32
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
一般查询日志(临时开启,排障用)
动态:
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 配置后,先备份并在维护窗口重启,验证日志正常输出与轮转。