Ubuntu MariaDB 日志管理实操指南
一 日志类型与用途
二 启用与配置各类日志
[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';
-- 查看插件目录
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/*.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
-- 登录 MariaDB 执行
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 或按文件名清理
PURGE BINARY LOGS TO 'mariadb-bin.000123';
四 日志查看与分析
# 查看服务日志(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
五 常见问题与排查要点