简介:mysql 日志slow log和 error log归档,发现还挺麻烦的。因为如果是大文件的话,比如大于200g,如果直接copy的话,就会把IO打满,影响mysql的生产业务。
一 、安全清理mysql 日志文件
脚本首先处理掉大的日志文件,因为logrotate轮转时是先copy,然后再清理日志文件,会打满磁盘IO。
1、把日志文件slow log和error log重命名;
2、然后进入mysql运行
flush slow logs;
和
flush error logs;
可以从新生成新的slow log和error log日志文件。
然后使用linux 大文件安全清理脚本,就可以安全删除文件了。
二、处理完大日志文件,可以再通过logrotate进行日志轮转:
logrotate的配置如下:
vim /etc/logrotate.d/mysql
/data/logs01/mysql-error.log{
weekly
rotate 30
missingok
dateext
olddir /data/log_bak
maxsize 500M
copytruncate
nocompress
dateformat -%Y%m%d.%s
}
/data/logs01/mysql-slow.log{
weekly
rotate 30
missingok
dateext
olddir /data/log_bak
maxsize 500M
copytruncate
nocompress
dateformat -%Y%m%d.%s
}
参数说明
1)log文件大小参数,单位可以为K,M,G
- size
触发分割的条件是:1.日志大小达到这个值,和时间周期没有关系。 - minisize
触发分割的条件是:1.时间周期到了,2.日志大小达到这个值;两个条件都要满足。 - maxsize
触发分割的条件是:1.时间周期到了,2. 日志大小大于这个值;两个条件任何一个满足。
注意:maxsize 要生效要自己配置定时任务探测周期
比如:crontab -l
* */4 * * * /etc/cron.daily/logrotate
2)daily 指定转储周期为每天 weekly 指定转储周期为每周 monthly 指定转储周期为每月
3) rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
4) dateext 使用当期日期作为命名格式
dateformat .%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
5) copytruncate 如果没有这个选项的话,操作方式:是将原log日志文件,移动成类似log.1的旧文件, 然后创建一个新的文件。如果设置了,操作方式为拷贝原日志文件,并且将其变成大小为0的文件。
6) missingok 如果日志丢失,不报错继续滚动下一个日志
7)olddir 备份目录
三、生产环境配置:
1 通过以上分析不想使用crontab的话,就只能使用maxsize参数来根据大小进行分割了。
logrotate配置如下:
/data/logs01/mysql-error.log{
weekly
rotate 30
missingok
dateext
olddir /data/log_bak
maxsize 500M
copytruncate
nocompress
dateformat -%Y%m%d.%s
}
/data/logs01/mysql-slow.log{
weekly
rotate 30
missingok
dateext
olddir /data/log_bak
maxsize 500M
copytruncate
nocompress
dateformat -%Y%m%d.%s
}
使logrotate每个小时去检查运行一次:
mv
/
etc
/
cron.daily
/
logrotate
/
etc
/
cron.hourly
/
总结:以上配置会让日志文件大于500M时就会进行日志切割,而不依赖于时间(weekly)。