开发者

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

开发者 https://www.devze.com 2024-10-30 09:06 出处:网络 作者: 高达可以过山车不行
目录背景实际操作:备份脚本和清理脚本思路一:每日备份日志思路二:每日清空日志快速验证脚本的方法:dd创建日志文件参考截图实际操作:配置corntab定时任务结束背景
目录
  • 背景
  • 实际操作:备份脚本和清理脚本
    • 思路一:每日备份日志
    • 思路二:每日清空日志
    • 快速验证脚本的方法:dd创建日志文件
    • 参考截图
  • 实际操作:配置corntab定时任务
    • 结束

      背景

      需求:

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

      解决:

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

      多说几句:

      • 等保二级要求必须开启MySQL数据库的通用查询日志general_log ,但其文件大小增长速度太快,数据库有效数据都还没增长多少,硬盘空间可能就会被general_log 日志占用不少。而binog 至少还能通过binlog_expire_logs_seconds过期时间参数设置日志保存策略,避javascript免占用空间。没有这样的参数限制generandroidal_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"
              cRCSwTmNjhown 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
      
      • 执行之前准备的脚本文件,查看结果。

      参考截图

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

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

      给脚本配置可执行权限:

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

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

      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日志内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消