MySQL5.7限制general_log日志大小的实现

 更新时间:2024年10月29日 11:28:59   作者:高达可以过山车不行  
MySQL5.7.41中为避免通用查询日志general_log快速增长占用硬盘空间,可以通过定时任务执行脚本进行每日备份或清理,从而限制其大小,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

需求:

  • 在MySQL 5.7.41中开启general_log 并限制其大小,避免快速增长占用硬盘空间。

解决:

  • 通过定时任务,执行简单的脚本,判断general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清理”的功能。

多说几句:

  • 等保二级要求必须开启MySQL数据库的通用查询日志general_log ,但其文件大小增长速度太快,数据库有效数据都还没增长多少,硬盘空间可能就会被general_log 日志占用不少。而binog 至少还能通过binlog_expire_logs_seconds过期时间参数设置日志保存策略,避免占用空间。没有这样的参数限制general_log,必然要通过其它手段限制general_log空间。

实际操作:备份脚本和清理脚本

提供两种思路:

  • 思路一:每日检查日志大小,当其超过某个阈值时,将文件复制归档到某个专门存储日志的目录。
  • 思路二:每日检查日志大小,当超过某个阈值时,不执行归档备份,直接将general_log内容清除。

MySQL中开启general日志需要修改my.cnf文件,增加以下两行指定日志存储路径:

[mysqld]
general_log = 1
general_log_file = /mnt/general.log

思路一:每日备份日志

参考脚本 bak_general_log.sh

#!/bin/bash

LOG_FILE="/mnt/general.log"
MAX_SIZE=100

if [ -f "$LOG_FILE" ]; then
    CURRENT_SIZE=$(du -m "$LOG_FILE" | awk '{print $1}')
    
    if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then
        mv "$LOG_FILE" "$LOG_FILE.$(date +%Y%m%d%H%M%S)"
        touch "$LOG_FILE"
        chmod 0640 "$LOG_FILE"
        chown mysql:mysql "$LOG_FILE"
        systemctl restart mysql
    fi
fi

思路二:每日清空日志

参考脚本 clear_general_log.sh

#!/bin/bash

LOG_FILE="/mnt/general.log"
MAX_SIZE=100

if [ -f "$LOG_FILE" ]; then
    CURRENT_SIZE=$(du -m "$LOG_FILE" | awk '{print $1}')
    
    if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then
        echo > "$LOG_FILE"
    fi
fi

快速验证脚本的方法:dd创建日志文件

  • 用dd命令快速生成指定大小的文件,比如生成101MB大小的/mnt/general.log文件,可以执行以下命令:
dd if=/dev/zero of=/mnt/general.log bs=1M count=101
  • 执行之前准备的脚本文件,查看结果。

参考截图

在这里插入图片描述

实际操作:配置corntab定时任务

给脚本配置可执行权限:

chmod +x bak_general_log.sh
chmod +x clear_general_log.sh

使用cron等工具将脚本定期执行,例如每天凌晨执行一次:

crontab -e

然后在编辑器中添加以下内容:

0 0 * * * /mnt/bak_general_log.sh
0 0 * * * /mnt/clear_general_log.sh

上述脚本二选一即可。

结束

注意:

  • 备份脚本中没有指定备份目录。
  • 备份脚本中涉及了MySQL应用重启。
  • 备份脚本的具体内容可根据实际情况修改。

到此这篇关于MySQL5.7限制general_log日志大小的文章就介绍到这了,更多相关MySQL5.7限制general_log日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • MySQL9.0的两种部署模式及各个版本发布的新功能

    MySQL9.0的两种部署模式及各个版本发布的新功能

    本文主要介绍了MySQL9.0的两种部署模式及各个版本发布的新功能,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • MySQL 配置文件 my.cnf / my.ini 区别解析

    MySQL 配置文件 my.cnf / my.ini 区别解析

    充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义,这篇文章主要介绍了MySQL 配置文件 my.cnf / my.ini 区别,需要的朋友可以参考下
    2022-11-11
  • MySQL中必须了解的13个关键字总结

    MySQL中必须了解的13个关键字总结

    这篇文章主要为大家详细介绍了MySQL中必须了解学会的13个关键字,文中的示例代码简洁易懂,对我们掌握MySQL有一定的帮助,需要的可以了解下
    2023-09-09
  • 关于TIMESTAMP with implicit DEFAULT value is deprecated 错误解决方法

    关于TIMESTAMP with implicit DEFAULT value&

    本文介绍了“TIMESTAMP with implicit DEFAULT value is deprecated”错误的原因及解决方法,解决方法包括显式指定默认值、修改字段类型、更新数据库版本或寻求帮助,感兴趣的朋友一起看看吧
    2025-02-02
  • MySQL数据库主从复制与读写分离

    MySQL数据库主从复制与读写分离

    大家好,本篇文章主要讲的是MySQL数据库主从复制与读写分离,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 一个字段同时满足多个条件的查询

    一个字段同时满足多个条件的查询

    当一个字段需要同时等于多个值的时候,用and直接连不会有数据查出。
    2011-08-08
  • Mysql数据库乱码问题的对应方式

    Mysql数据库乱码问题的对应方式

    今天小编就为大家分享一篇关于Mysql数据库乱码问题的对应方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • MySQL 统计查询实现代码

    MySQL 统计查询实现代码

    MySQL 统计查询其实就是通过SELECT COUNT() FROM 语法用于从数据表中统计数据行数
    2014-05-05
  • 一文了解MySQL事务隔离级别

    一文了解MySQL事务隔离级别

    这篇文章主要介绍了一文了解MySQL事务隔离级别,MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,文章介绍 4 种事物隔离,需要的小伙伴可以学习一下
    2022-07-07
  • 利用JuiceFS使MySQL 备份验证性能提升 10 倍

    利用JuiceFS使MySQL 备份验证性能提升 10 倍

    这篇文章主要介绍了如何让 MySQL 备份验证性能提升 10 倍,JuiceFS 非常适合用来做 MySQL 物理备份,通过不断调整 XtraBackup 的参数和 JuiceFS 的挂载参数,在一个小时内将时间缩短到原先的 1/10,下文一起来看相关内容的详细介绍吧
    2022-03-03

最新评论