温馨提示×

Ubuntu MariaDB日志管理有哪些技巧

小樊
56
2025-10-06 03:22:58
栏目: 云计算

Ubuntu MariaDB日志管理实用技巧

1. 日志类型与基础配置

MariaDB的日志主要分为以下几类,需根据需求启用并配置路径:

  • 错误日志:记录服务器启动、运行及关闭中的错误信息,是排查问题的核心日志。
    配置示例(/etc/mysql/mariadb.conf.d/50-server.cnf):
    [mysqld]
    log_error = /var/log/mysql/mariadb-error.log
    log_error_verbosity = 3  # 记录错误、警告、提示(级别越高越详细)
    
  • 慢查询日志:记录执行时间超过阈值的查询,用于性能优化。
    配置示例:
    [mysqld]
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/mariadb-slow.log
    long_query_time = 2  # 阈值(秒),建议从2开始调整
    log_queries_not_using_indexes = 1  # 记录未使用索引的查询
    
  • 二进制日志:记录数据变更(增删改),用于主从复制和时间点恢复。
    配置示例:
    [mysqld]
    log_bin = /var/log/mysql/mariadb-bin  # 自动追加序号(如.000001)
    binlog_format = ROW  # 推荐ROW格式(更准确)
    expire_logs_days = 7  # 自动过期天数(避免磁盘爆满)
    
  • 通用查询日志:记录所有客户端连接和SQL语句(调试用,生产环境慎用)。
    配置示例:
    [mysqld]
    general_log = 1
    general_log_file = /var/log/mysql/mariadb-query.log
    general_log_output = FILE
    
  • 审计日志:记录用户活动(连接、查询、表操作),用于安全审计(需安装插件)。
    配置步骤:
    ① 安装插件:修改50-server.cnf添加plugin_load_add = server_audit
    ② 设置参数:
    server_audit_events = CONNECT,QUERY,TABLE  # 监听连接、查询、表操作
    server_audit_logging = ON
    server_audit_file_path = /var/log/mysql/audit.log
    server_audit_file_rotate_size = 100M  # 单个文件大小
    server_audit_file_rotations = 5       # 保留文件数
    
    重启服务使配置生效:sudo systemctl restart mariadb

2. 日志轮转自动化

使用logrotate工具定期轮转日志,避免单个文件过大占用磁盘空间。

  • 默认配置:Ubuntu的logrotate已内置MariaDB配置(/etc/logrotate.d/mysql),内容如下:
    /var/log/mysql/*.log {
        daily                # 每天轮转
        rotate 7             # 保留7天
        missingok            # 文件不存在不报错
        compress             # 压缩旧日志(gzip)
        delaycompress        # 延迟压缩(避免影响当前日志写入)
        notifempty           # 空日志不轮转
        create 640 mysql adm # 新日志权限(用户:组)
        sharedscripts        # 所有日志处理完再执行脚本
        postrotate
            /usr/bin/mysqladmin flush-logs  # 刷新日志(重新打开文件句柄)
        endscript
    }
    
  • 手动测试:验证配置是否正确,-v显示详细过程,-f强制轮转:
    sudo logrotate -vf /etc/logrotate.d/mysql
  • 手动轮转:无需等待定时任务,直接刷新日志:
    mysqladmin flush-logsFLUSH LOGS;(SQL命令)。

3. 日志查看与分析

  • 实时查看:使用tail -f跟踪日志更新(如错误日志):
    sudo tail -f /var/log/mysql/mariadb-error.log
  • 搜索关键字:用grep过滤特定内容(如“error”):
    sudo grep -i "error" /var/log/mysql/mariadb-error.log
  • 慢查询分析
    ① 使用mysqldumpslow(内置工具)统计慢查询:
    mysqldumpslow -s t /var/log/mysql/mariadb-slow.log(按时间排序);
    ② 使用pt-query-digest(Percona工具包)生成详细报告:
    pt-query-digest /var/log/mysql/mariadb-slow.log > slow_report.txt
  • 二进制日志分析:用mysqlbinlog查看变更内容(如恢复数据):
    ① 查看所有二进制日志:mysqlbinlog /var/log/mysql/mariadb-bin.000001
    ② 查看特定时间范围的日志:
    mysqlbinlog --start-datetime="2025-10-01 00:00:00" --stop-datetime="2025-10-01 23:59:59" /var/log/mysql/mariadb-bin.000001
    ③ 导出为SQL文件(用于恢复):
    mysqlbinlog /var/log/mysql/mariadb-bin.000001 > recovery.sql

4. 日志管理工具

  • Systemd Journal:Ubuntu默认的日志管理系统,可查询MariaDB日志(集成在系统日志中):
    ① 查看最近日志:journalctl -u mariadb
    ② 查看特定时间范围:journalctl --since "2025-10-01" --until "2025-10-02"
    ③ 清理旧日志:journalctl --vacuum-size=100M(限制总大小为100M)或journalctl --vacuum-time=2weeks(清理两周前的日志)。
  • Loki+Grafana:适用于云原生环境的日志聚合与可视化方案:
    ① 部署:使用Docker Compose拉取Loki和Grafana镜像(参考Public-Compose仓库);
    ② 配置:将MariaDB日志发送到Loki(通过Filebeat或自定义脚本);
    ③ 可视化:在Grafana中创建Dashboard,展示错误日志趋势、慢查询分布等。

5. 日志安全与优化

  • 权限控制:确保日志目录(/var/log/mysql/)仅允许mysql用户和adm组访问:
    sudo chown -R mysql:adm /var/log/mysql/
    sudo chmod -R 750 /var/log/mysql/
  • 日志清理:除logrotate外,可定期用find命令删除旧日志(如超过30天):
    find /var/log/mysql/ -type f -name "*.log" -mtime +30 -exec rm {} \;(谨慎使用,建议配合logrotate)。
  • 生产环境建议
    ① 关闭通用查询日志(general_log = 0),避免记录所有查询导致磁盘占用过高;
    ② 开启二进制日志(log_bin = ON),确保数据可恢复;
    ③ 调整慢查询阈值(long_query_time):根据业务需求设置为1-5秒,优先优化高频慢查询。

0