Ubuntu上MariaDB日志管理指南
MariaDB的日志管理是数据库运维的重要环节,涵盖日志类型配置、日志轮转、查看分析及高级管理等方面。以下是具体操作步骤:
MariaDB的日志分为五大类,每类日志的作用不同:
错误日志默认开启,可通过修改配置文件调整路径和详细程度:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
添加/修改以下内容:
[mysqld]
log_error = /var/log/mysql/mariadb-error.log # 日志文件路径
log_error_verbosity = 3 # 日志详细程度(1=错误,2=警告,3=信息,4=调试)
保存后重启MariaDB使配置生效:
sudo systemctl restart mariadb
通用查询日志默认关闭,需手动开启:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
添加/修改以下内容:
[mysqld]
general_log = 1 # 开启通用查询日志
general_log_file = /var/log/mysql/mariadb-query.log # 日志文件路径
general_log_output = FILE # 日志输出方式(FILE=文件,TABLE=数据库表)
重启MariaDB:
sudo systemctl restart mariadb
慢查询日志默认关闭,需设置阈值和日志路径:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
添加/修改以下内容:
[mysqld]
slow_query_log = 1 # 开启慢查询日志
slow_query_log_file = /var/log/mysql/mariadb-slow.log # 日志文件路径
long_query_time = 2 # 慢查询阈值(单位:秒,默认10秒)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
重启MariaDB:
sudo systemctl restart mariadb
二进制日志默认开启(部分版本可能关闭),需设置路径、格式和过期时间:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
添加/修改以下内容:
[mysqld]
log_bin = /var/log/mysql/mariadb-bin # 二进制日志文件前缀(实际文件名为mariadb-bin.000001)
binlog_format = ROW # 二进制日志格式(ROW=推荐,STATEMENT=语句,MIXED=混合)
expire_logs_days = 7 # 二进制日志过期天数(自动删除7天前的日志)
sync_binlog = 1 # 每次事务提交时同步二进制日志到磁盘(保证数据一致性)
重启MariaDB:
sudo systemctl restart mariadb
若需要安全审计,需安装server_audit
插件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
添加以下内容:
[mysqld]
plugin_load_add = server_audit # 加载审计插件
server_audit_events = CONNECT,QUERY,TABLE # 审计事件(CONNECT=用户连接,QUERY=SQL查询,TABLE=表操作)
server_audit_logging = ON # 开启审计日志
server_audit_file_path = /var/log/mysql/audit.log # 审计日志路径
server_audit_file_rotate_size = 1000000 # 单个审计日志文件大小(1MB)
server_audit_file_rotations = 5 # 保留的审计日志文件数量
重启MariaDB:
sudo systemctl restart mariadb
验证插件是否加载:
SHOW PLUGINS;
应显示server_audit
插件状态为ACTIVE
。
使用logrotate
工具自动轮转、压缩和删除旧日志,避免日志文件占用过多磁盘空间。
sudo nano /etc/logrotate.d/mariadb
添加以下内容:
/var/log/mysql/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7天的日志
missingok # 若日志文件不存在也不报错
compress # 压缩旧日志(使用gzip)
delaycompress # 延迟压缩(当前轮转的日志不压缩,下一次轮转时压缩)
notifempty # 若日志为空则不轮转
create 640 mysql mysql # 创建新日志文件时设置权限和所有者
sharedscripts # 所有日志轮转完成后执行postrotate脚本
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/mariadb
-v
表示详细模式,-f
表示强制轮转(即使未到轮转时间)。
检查/var/log/mysql/
目录,应看到类似mariadb-error.log.1.gz
(压缩的旧日志)和mariadb-error.log
(当前日志)的文件。
使用tail
命令实时查看日志文件的最新内容:
# 查看错误日志
sudo tail -f /var/log/mysql/mariadb-error.log
# 查看慢查询日志
sudo tail -f /var/log/mysql/mariadb-slow.log
使用grep
命令搜索日志中的关键词(如“error”):
# 搜索错误日志中的“error”关键词
sudo grep 'error' /var/log/mysql/mariadb-error.log
# 搜索慢查询日志中的“SELECT”关键词
sudo grep 'SELECT' /var/log/mysql/mariadb-slow.log
使用mysqldumpslow
(MariaDB自带工具)或pt-query-digest
(Percona工具包)分析慢查询日志:
# 使用mysqldumpslow分析(按查询次数排序)
sudo mysqldumpslow -s c /var/log/mysql/mariadb-slow.log
# 使用pt-query-digest分析(需安装Percona工具包)
sudo pt-query-digest /var/log/mysql/mariadb-slow.log
使用mysqlbinlog
工具查看二进制日志内容(可将二进制日志转换为可读的SQL语句):
# 查看最新的二进制日志
sudo mysqlbinlog /var/log/mysql/mariadb-bin.000001
# 查看指定时间范围内的二进制日志(如2025-01-01至2025-01-31)
sudo mysqlbinlog --start-datetime="2025-01-01 00:00:00" --stop-datetime="2025-01-31 23:59:59" /var/log/mysql/mariadb-bin.000001
MariaDB的日志也会记录在系统日志中,可使用journalctl
命令查看:
# 查看MariaDB的实时日志
sudo journalctl -u mariadb -f
# 查看最近的MariaDB日志(按时间排序)
sudo journalctl -u mariadb --since "2025-01-01" --until "2025-01-31"
# 清理系统日志(如释放100MB空间)
sudo journalctl --vacuum-size=100M
使用awk
、sed
等工具对日志进行进一步分析(如统计错误日志数量):
# 统计2025-01-01的错误日志数量
awk '/Jan 1/ {count++} END {print count}' /var/log/mysql/mariadb-error.log
mysql
用户和mysql
组,修改日志路径或配置时需确保权限正确(如chown mysql:mysql /var/log/mysql/*.log
)。