关于MySQL的日志,有一些文件名一直保持不变,但是如果打开会产生很多的文件,那么如何进行保留呢,一般就是使用轮训的方式管理日志,下面就来研究下:
最大的特征:文件名一直不变
根据MySQL提供的数据mysql-log-logrotate脚本可以知道这个命令logrtate
查看/etc/crond.daily/logrotate
/etc/logrotate.cnf
/etc/logrotate.d 需要轮训的脚本放在此目录下
logrotate是根据cron运行的,也就是说定时任务,打开脚本
#
# ATTENTION: The /root/.my.cnf file should be readable
# _ONLY_ by root !
#/opt/mysql/data/hack-slow.log
#/opt/mysql/data/mysql-general.log
/opt/mysql/data/*.log {
create 600 mysql mysql
notifempty
daily
rotate 5
missingok
compress
postrotate
# just if mysqld is really running
if test -x /usr/local/mysql/bin/mysqladmin && \
/usr/local/mysql/bin/mysqladmin ping &>/dev/null
then
/usr/local/mysql/bin/mysqladmin flush-logs
fi
endscript
}
执行命令测试:/usr/sbin/logrotate -f /etc/logrotate.d/mysql-log-rotate
可以切换两个配置文件.或者用*.log,切换目录下所有
logrotate常见选项:
选项 含义
compress 压缩日志文件的所有非当前版本
copy 复制当前的日志文件,忽略create参数
copytruncate 复制当前的日志文件,并置空当前文件
daily 每天轮日志文件i
dateext 轮换的日志后缀为-YYYYMMDD格式
delaycompress 压缩除了当前和最近之外的所有其他版本
missingok 如果日志不存在,不会报错
notifempty 如果日志为空,则不轮换
rotate n 在轮换方案中包含n个版本的日志
size=logsize 如果日志文件大于logsize才轮换
也可以自己手工写一个大致还是这个意思,假设需要保留七天的日志记录
rotate-log.sh
#!/bin/bash
#rotate-log.sh
#Argument 1:log filename
if [ $# -ne 1 ]; then
echo "Usage:$0 logname" 1>&2
exit 1
fi
mysqladmin flush-logs
logfile=$1
mv $logfile.6 $logfile.7
mv $logfile.5 $logfile.6
mv $logfile.4 $logfile.5
mv $logfile.3 $logfile.4
mv $logfile.2 $logfile.3
mv $logfile.1 $logfile.2
mv $logfile $logfile.1