ubuntu

Ubuntu MariaDB日志管理方法

小樊
41
2025-09-27 15:00:44
栏目: 云计算

Ubuntu MariaDB日志管理方法

一、MariaDB日志类型概述

MariaDB的日志系统涵盖多种类型,用于不同的监控与维护场景:

二、日志配置方法

1. 错误日志配置

编辑MariaDB主配置文件(/etc/mysql/mariadb.conf.d/50-server.cnf),添加或修改以下参数:

[mysqld]
log_error = /var/log/mysql/mariadb-error.log  # 错误日志路径
log_error_verbosity = 3  # 日志详细程度(0=无,1=错误,2=警告,3=信息)

修改后重启MariaDB服务使配置生效:

sudo systemctl restart mariadb

2. 通用查询日志配置

临时启用(重启后失效):

SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/mariadb-query.log';

永久启用:在配置文件中添加:

[mysqld]
general_log = 1  # 开启通用查询日志
general_log_file = /var/log/mysql/mariadb-query.log  # 日志路径
general_log_output = FILE  # 输出到文件(可选:TABLE/FILE)

3. 慢查询日志配置

临时启用

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;  # 设置慢查询阈值为2SET GLOBAL slow_query_log_file = '/var/log/mysql/mariadb-slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';  # 记录未使用索引的查询

永久启用:在配置文件中添加:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

4. 二进制日志配置

临时启用

SET GLOBAL log_bin = 'ON';
SET GLOBAL binlog_format = 'ROW';  # 推荐ROW格式(支持数据恢复)
SET GLOBAL expire_logs_days = 7;  # 二进制日志过期天数

永久启用:在配置文件中添加:

[mysqld]
log_bin = /var/log/mysql/mariadb-bin  # 二进制日志路径(无需扩展名)
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1  # 每次事务提交同步二进制日志到磁盘(提高可靠性)

5. 审计日志配置(可选)

若需启用安全审计,需先确认审计插件是否存在:

SHOW GLOBAL VARIABLES LIKE 'plugin_dir';

编辑配置文件,加载审计插件并配置参数:

[mysqld]
plugin_load_add = server_audit  # 加载审计插件
server_audit_events = CONNECT,QUERY,TABLE  # 记录连接、查询、表操作
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

三、日志轮转管理

为防止日志文件过大占用磁盘空间,需使用logrotate工具进行自动轮转。

1. 创建MariaDB专用logrotate配置

编辑/etc/logrotate.d/mariadb文件,添加以下内容:

/var/log/mysql/*.log {
    daily  # 每天轮转
    rotate 7  # 保留最近7天的日志
    missingok  # 若日志文件不存在也不报错
    compress  # 压缩旧日志(节省空间)
    delaycompress  # 延迟压缩(避免压缩正在写入的日志)
    notifempty  # 若日志为空则不轮转
    create 640 mysql mysql  # 创建新日志文件并设置权限
    postrotate
        if test -x /usr/bin/mysqladmin && \
           /usr/bin/mysqladmin ping &>/dev/null; then
            /usr/bin/mysqladmin flush-logs  # 轮转后刷新日志
        fi
    endscript
}

2. 手动测试logrotate配置

sudo logrotate -vf /etc/logrotate.d/mariadb

-v表示详细模式,-f表示强制轮转)

3. 手动轮转日志

若需立即轮转日志,可使用以下命令:

mysqladmin flush-logs  # MariaDB命令
# 或
FLUSH LOGS;  # SQL语句

4. 手动清理旧日志

若未启用logrotate,可手动删除超过30天的日志文件:

find /var/log/mysql/ -type f -name "*.log" -mtime +30 -exec rm {} \;

四、日志查看与分析

1. 使用journalctl查看系统日志

journalctl可查看MariaDB的系统日志(集成在systemd中):

# 查看MariaDB最新日志
journalctl -u mariadb
# 实时监控日志
journalctl -u mariadb -f
# 查看指定时间段的日志
journalctl --since "2025-09-01" --until "2025-09-27"
# 清理日志(限制大小为100MB)
journalctl --vacuum-size=100M

2. 使用tail实时查看日志文件

# 实时查看错误日志
tail -f /var/log/mysql/mariadb-error.log
# 实时查看慢查询日志
tail -f /var/log/mysql/mariadb-slow.log

3. 使用grep搜索关键字

# 搜索错误日志中的"ERROR"关键字
grep 'ERROR' /var/log/mysql/mariadb-error.log
# 统计错误日志中的错误数量
awk '/ERROR/ {count++} END {print count}' /var/log/mysql/mariadb-error.log

4. 分析慢查询日志

使用mysqldumpslow(MariaDB自带工具)分析慢查询日志:

mysqldumpslow -s t /var/log/mysql/mariadb-slow.log  # 按执行时间排序
# 或使用pt-query-digest(Percona工具包,更强大)
pt-query-digest /var/log/mysql/mariadb-slow.log

5. 分析二进制日志

使用mysqlbinlog工具查看二进制日志内容:

# 查看二进制日志内容
mysqlbinlog /var/log/mysql/mariadb-bin.000001
# 查看指定时间段的二进制日志
mysqlbinlog --start-datetime="2025-09-01 00:00:00" --stop-datetime="2025-09-27 23:59:59" /var/log/mysql/mariadb-bin.000001
# 导出二进制日志到SQL文件
mysqlbinlog /var/log/mysql/mariadb-bin.000001 > /tmp/binlog.sql

五、注意事项

0
看了该问题的人还看了