ubuntu

Ubuntu上MariaDB的日志管理怎么做

小樊
42
2025-10-04 02:43:53
栏目: 云计算

Ubuntu上MariaDB日志管理指南

MariaDB的日志管理是数据库运维的重要环节,涵盖日志类型配置、日志轮转、查看分析及高级管理等方面。以下是具体操作步骤:

一、MariaDB主要日志类型

MariaDB的日志分为五大类,每类日志的作用不同:

二、日志配置步骤

1. 配置错误日志

错误日志默认开启,可通过修改配置文件调整路径和详细程度:

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

2. 配置通用查询日志

通用查询日志默认关闭,需手动开启:

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

3. 配置慢查询日志

慢查询日志默认关闭,需设置阈值和日志路径:

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

4. 配置二进制日志

二进制日志默认开启(部分版本可能关闭),需设置路径、格式和过期时间:

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

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

若需要安全审计,需安装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工具自动轮转、压缩和删除旧日志,避免日志文件占用过多磁盘空间。

1. 创建MariaDB专用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
}

2. 手动测试logrotate配置

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

-v表示详细模式,-f表示强制轮转(即使未到轮转时间)。

3. 验证logrotate是否生效

检查/var/log/mysql/目录,应看到类似mariadb-error.log.1.gz(压缩的旧日志)和mariadb-error.log(当前日志)的文件。

四、日志查看与分析

1. 实时查看日志

使用tail命令实时查看日志文件的最新内容:

# 查看错误日志
sudo tail -f /var/log/mysql/mariadb-error.log

# 查看慢查询日志
sudo tail -f /var/log/mysql/mariadb-slow.log

2. 搜索特定日志

使用grep命令搜索日志中的关键词(如“error”):

# 搜索错误日志中的“error”关键词
sudo grep 'error' /var/log/mysql/mariadb-error.log

# 搜索慢查询日志中的“SELECT”关键词
sudo grep 'SELECT' /var/log/mysql/mariadb-slow.log

3. 分析慢查询日志

使用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

4. 查看二进制日志

使用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

5. 使用journalctl查看系统日志

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

6. 使用文本工具分析日志

使用awksed等工具对日志进行进一步分析(如统计错误日志数量):

# 统计2025-01-01的错误日志数量
awk '/Jan  1/ {count++} END {print count}' /var/log/mysql/mariadb-error.log

五、注意事项

0
看了该问题的人还看了