背景:
在 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 /usr/local/mysqlinstall/mysql/bin/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
到此这篇关于如何使用logrotete定时切割mysql的慢日志的文章就介绍到这了,更多相关mysql慢日志内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论