当前位置: 首页 > news >正文

如何使用logrotete定时切割mysql的慢日志

背景:

在 Linux 系统中,logrotate 是常用的日志文件管理工具,可以配置它来对 MySQL 的慢查询日志进行轮转,例如按照每天或者每周进行轮转,将旧的日志文件备份压缩并重新生成新的日志文件来继续记录!

创建配置文件

创建一个专门用于配置 MySQL 慢查询日志切割规则的文件,通常放在 /etc/logrotate.d/ 目录下。假设你的 MySQL 慢查询日志文件名为 /var/lib/mysql/[主机名]-slow.log(这里的 [主机名] 需要替换为实际的主机名称,你可以通过 hostname 命令查看主机名),创建名为 mysql-slow 的配置文件(文件路径为 /etc/logrotate.d/mysql-slow

这是我目前在用的慢日志切割配置,可以直接拿来使用(密码替换进去)

/data/mysql/my3306/log/slow.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 640 mysql mysql
    dateext                    
    dateformat -%Y%m%d         
    sharedscripts
    postrotate
        mysql -uroot -p密码 -e "SET GLOBAL slow_query_log = OFF; SET GLOBAL slow_query_log = ON;"
    endscript
}

关键参数说明

1. 轮转频率与保留策略
  • **daily**
    每天检查一次日志文件,满足条件则触发轮转。
  • **rotate 30**
    保留最近30次轮转的日志文件(默认按天轮转,即保留30天日志)。
  • **compress**
    压缩旧日志为 .gz 格式,节省磁盘空间。
2. 文件命名与日期格式
  • **dateext**
    使用日期作为轮转文件的后缀(例如 slow.log-20231101)。
  • **dateformat -%Y%m%d**
    自定义日期格式:-%Y%m%d 表示 -年月日(如 -20231101)。
3. 文件权限与空文件处理
  • **create 640 mysql mysql**
    轮转后创建的新日志文件权限为 640,所有者为 mysql 用户和组(需确保 MySQL 进程有写入权限)。
  • **notifempty**
    如果日志文件为空,跳过轮转(避免生成无意义的空日志文件)。
4. 执行脚本与错误处理
  • **sharedscripts**
    所有匹配的日志文件轮转完成后,只执行一次 postrotate 脚本(即使有多个日志文件)。

  • **postrotate**
    轮转后执行以下操作:

    • 临时关闭 MySQL 慢查询日志(slow_query_log = OFF)。
    • 重新开启慢查询日志(slow_query_log = ON),使 MySQL 写入新日志文件。
    • 注意:需替换 -p密码 为实际的 MySQL root 密码。
5. 其他
  • **missingok**
    如果日志文件不存在,忽略错误继续执行(避免因文件丢失导致任务失败)。

测试

配置完成后,可以手动运行 logrotate 命令来测试配置是否正确以及能否正常工作

logrotate -vf /etc/logrotate.d/mysql-slow

-f 参数表示强制按照配置文件执行轮转操作

定时任务部署

为了避免重复执行,将cron.daily中的logrotate移除

cd 	/etc/cron.daily
mv logrotate logrotate.bak

crontab部署

0 2 * * *  /usr/sbin/logrotate -vf /etc/logrotate.d/mysql-slow 
http://www.dtcms.com/a/62029.html

相关文章:

  • 【SpringMVC】深入解析使用 Postman 在请求中传递对象类型、数组类型、参数类型的参数方法和后端参数重命名、及非必传参数设置的方法
  • Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护
  • React 性能优化
  • 使用Python实现量子计算实验工具的全景指南
  • WHAT - 前端性能指标
  • 记录一次解决日期格式引起的SQL失效的问题
  • Python Flask 开发用于访问数据库的 REST API
  • 深度学习与大模型-矩阵的运算
  • Trae AI 自动升级项目Nuxt版本
  • 其他元素的乘积(前后缀积)
  • C++ 编程指南27 - 始终将 mutex 与它所保护的数据一起定义,并尽可能使用 synchronized_value<T>
  • Linux网络 五种 IO 模型
  • Netty基础—2.网络编程基础四
  • Linux运维(三)Linux命令行操作:从菜鸟到高手
  • 【性能测试】Jmeter如何做一份测试报告(3)
  • C++ 布尔类型(bool)深度解析
  • PHP+redis 优雅实现加锁机制
  • RedHatLinux的第一次作业
  • 单片机OTA升级中Bootloader怎么判断APP有没有问题?
  • java的字符串,数组,集合的长度/大小
  • 通用人工智能(AGI):定义、挑战与未来展望
  • 关于ngx-datatable no data empty message自定义模板解决方案
  • 在虚拟机VMware上安装CENTOS7-图文教程
  • 【iOS逆向与安全】sms短信转发插件与上传服务器开发
  • 解锁 Postman:下载安装与账户注册使用的全攻略,踏上测试新征程
  • 项目管理系统在制造企业 IPD 研发管理中的应用实践
  • 硬件电路 - 推挽(PP)输出与开漏(OD)输出的区别
  • ViM-UNet模型详解及代码复现
  • 如和实现一个服务器端高并发线程池
  • 【C++】滑动窗口算法