You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB 10.3如何限制general_log文件大小?已配置日志写入文件

处理MariaDB 10.3通用日志(general_log)过大的问题

嘿,刚好对MariaDB 10.3的通用日志这块熟,来给你捋清楚~

首先得明确:MariaDB 10.3本身没有像binlog那样,直接给general_log设置大小限制或自动过期的内置参数,没法通过my.cnf配置实现自动轮转或清理,得靠外部工具来搞定。下面给你几个靠谱的方案:

方案一:用系统自带的logrotate(最推荐)

Linux系统几乎都自带logrotate,专门用来管理日志文件轮转,比手动写crontab脚本更稳定。

配置步骤:

  1. 创建logrotate配置文件:

    sudo touch /etc/logrotate.d/mysql-general-log
    
  2. 编辑这个文件,加入以下内容(可根据需求调整参数):

    /var/log/mysql/mysql.log {
        daily          # 每天轮转一次,也可设weekly/monthly
        rotate 7       # 保留最近7份轮转后的日志
        compress       # 旧日志自动压缩
        missingok      # 日志文件不存在时不报错
        create 640 mysql mysql  # 新建日志文件的权限和属主
        postrotate
            # 通知MariaDB刷新日志,避免继续往旧文件写入
            mysqladmin -uroot -p'你的数据库密码' flush-logs 2>/dev/null || true
        endscript
    }
    

    小提示:不想明文写密码的话,可以给root用户配置免密登录(比如在~/.my.cnf里添加认证信息),或者用sudo mysqladmin flush-logs(确保mysqladmin有sudo权限)。

  3. 测试配置是否生效:

    sudo logrotate -v /etc/logrotate.d/mysql-general-log
    

    正常情况下会输出轮转过程的详细信息,无报错就说明配置没问题。logrotate会通过系统自带的定时任务每天自动执行。

方案二:用crontab自定义脚本

如果不想用logrotate,也可以自己写shell脚本,配合crontab定时执行。

示例脚本(命名为rotate_mysql_general_log.sh):

#!/bin/bash
LOG_FILE="/var/log/mysql/mysql.log"
BACKUP_DIR="/var/log/mysql/archives"

# 创建备份目录(不存在则新建)
mkdir -p $BACKUP_DIR

# 刷新日志,让MariaDB切换到新文件
mysqladmin -uroot -p'你的数据库密码' flush-logs

# 按日期重命名并压缩旧日志
DATE=$(date +%Y%m%d_%H%M%S)
mv $LOG_FILE $BACKUP_DIR/mysql_log_$DATE.log
gzip $BACKUP_DIR/mysql_log_$DATE.log

# 删除7天前的旧备份
find $BACKUP_DIR -name "mysql_log_*.log.gz" -mtime +7 -delete

给脚本添加执行权限:

chmod +x rotate_mysql_general_log.sh

最后在crontab里添加定时任务(比如每天凌晨2点执行):

crontab -e

加入一行:

0 2 * * * /path/to/rotate_mysql_general_log.sh

方案三:手动轮转(临时需求)

如果只是临时需要清理日志,不用长期自动化,可以手动执行以下操作:
先备份旧日志:

mv /var/log/mysql/mysql.log /var/log/mysql/mysql.log.$(date +%Y%m%d)

再通知MariaDB刷新日志,生成新的空日志文件:

mysqladmin -uroot -p flush-logs

或者登录MariaDB执行SQL命令:

FLUSH GENERAL LOG;

总结

优先选logrotate,它是系统级的成熟工具,能处理各种边缘情况(比如日志文件不存在、权限问题等),比自己写脚本省心。如果有特殊定制需求,再考虑自定义crontab脚本。

内容的提问来源于stack exchange,提问作者AntmadDG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:54:13