阅读量:2
Ubuntu MariaDB 日志管理实操指南
一 日志类型与用途
- 错误日志 Error Log:记录服务启动、运行、关闭过程中的错误与告警,用于故障定位。
- 一般查询日志 General Query Log:记录客户端连接与所有执行的 SQL,便于审计与排错(性能敏感,通常仅临时开启)。
- 慢查询日志 Slow Query Log:记录超过阈值的 SQL,用于性能优化。
- 二进制日志 Binary Log:记录数据变更,用于主从复制与时间点恢复 PITR。
- 中继日志 Relay Log:从库接收主库事件的中转日志(复制环境)。
- 审计日志 Audit Log:记录关键操作(connect、query、table 等),用于安全合规审计。
- 系统层面还可通过 systemd journal 与 rsyslog 统一收集与转发服务日志。
二 启用与配置各类日志
- 编辑配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf(或同目录下的 server.cnf)。以下为常用示例(按需启用):
[mysqld]
# 错误日志
log_error = /var/log/mysql/error.log
log_error_verbosity = 3
# 一般查询日志(谨慎开启)
general_log = 0
general_log_file = /var/log/mysql/general.log
general_log_output = FILE
# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# log_queries_not_using_indexes = 1 # 可选:记录未使用索引的查询
# 二进制日志(用于复制与PITR)
log_bin = /var/log/mysql/mariadb-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1
# 中继日志(仅复制从库)
# relay_log = /var/log/mysql/relay.log
- 动态开关(无需重启,立即生效,持久化仍需写入配置):
-- 一般查询日志
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
-- 慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
- 审计日志(server_audit 插件,按需启用):
-- 查看插件目录
SHOW GLOBAL VARIABLES LIKE 'plugin_dir';
-- 在配置文件中加入(50-server.cnf 的 [mysqld] 段)
plugin_load_add = server_audit
server_audit_events = connect,query,table
server_audit_file_rotate_size = 1000000
server_audit_file_rotations = 5
- 应用配置并重启服务:
sudo systemctl restart mariadb
- 目录与权限建议:确保日志目录(如 /var/log/mysql)存在且属主为 mysql:adm(Debian/Ubuntu 常见),否则服务可能无法写入。
三 日志轮转与保留策略
- 使用 logrotate 管理 MariaDB 文本日志(error、general、slow 等):
- 配置文件:/etc/logrotate.d/mysql(如不存在可新建),示例:
/var/log/mysql/*.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
create 640 mysql adm
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 天),也可手动清理:
-- 登录 MariaDB 执行
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 或按文件名清理
PURGE BINARY LOGS TO 'mariadb-bin.000123';
- 触发日志轮转的两种方式:
- SQL:FLUSH LOGS;
- 命令行:mysqladmin flush-logs。
四 日志查看与分析
- 实时与检索:
# 查看服务日志(systemd)
journalctl -u mariadb -f
# 实时查看错误日志
tail -f /var/log/mysql/error.log
# 关键字检索
grep -i 'error' /var/log/mysql/error.log
- 慢查询分析:
# 内置工具
mysqldumpslow /var/log/mysql/slow.log
# Percona Toolkit(更强大)
pt-query-digest /var/log/mysql/slow.log
- 二进制日志解析与时间范围查看:
mysqlbinlog /var/log/mysql/mariadb-bin.000001
mysqlbinlog \
--start-datetime="2025-12-01 00:00:00" \
--stop-datetime="2025-12-01 23:59:59" \
/var/log/mysql/mariadb-bin.000001
- 审计日志:直接查看审计插件输出文件(路径由 server_audit_file_path 决定,未显式设置时与 error_log 同目录)。
五 常见问题与排查要点
- 找不到错误日志:常见路径为 /var/log/mysql/error.log,也可能为 /var/log/mariadb/mariadb.log;如未生成,检查 log_error 配置与目录权限。
- 权限问题:确保日志目录属主为 mysql:adm,否则 MariaDB 无法写入。
- 配置不生效:修改 /etc/mysql/mariadb.conf.d/50-server.cnf 后需重启服务;动态变量(如 general_log、slow_query_log)可用 SET GLOBAL 即时生效。
- 二进制日志过大:设置 expire_logs_days,并定期执行 PURGE BINARY LOGS;确保复制或备份工具(如 xtrabackup、mariabackup)已消费所需 binlog。
- 审计插件不可用:确认插件存在并已加载(SHOW PLUGINS;),必要时安装 server_audit 插件包。
以上就是关于“Ubuntu MariaDB的日志管理怎么做”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm