[root@172-16-3-190 shells]# cat clean_mysql_slow_log.sh
#!/binbash
#author=lyx
#time:2018-05-29
cur_date=`date +%y%m%d`
#step_days=5 #clean slowlog 6 days ago
for step_days in $(seq 5 -1 0)
do
end_date=`expr $cur_date - $step_days`
clean_line_num=`cat /opt/shells/slow.log |grep -n "^# Time: $end_date"|head -n 1|cut -d : -f 1`
if ((${#clean_line_num} > 1))
then
clean_max_line_num=`expr $clean_line_num - 1`
sed -i "1,$clean_max_line_num d" /opt/shells/slow.log
break
fi
done
echo $clean_max_line_num
echo $step_days
该脚本的策略是根据当前时间,保留最近5天的慢日志,每次运行脚本则保留的日志天数减少一天。当然如果你有更好的业务策略或者脚本逻辑也可以择优选择,比如你可以根据慢日志的文件大小,配置告警并触发清理,或者crontab都可以。
[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh
1746208
5
[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh
1638936
4
[root@172-16-3-190 shells]# cp /opt/app/mysql_3309/logs/slow.log .
cp: overwrite `./slow.log'? y
[root@172-16-3-190 shells]# ls -lh slow.log
-rw-r----- 1 root root 844M May 29 18:24 slow.log
[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh
1746208
5
[root@172-16-3-190 shells]# ls -lh slow.log
-rw-r----- 1 root root 781M May 29 18:25 slow.log
[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh
1638936
4
[root@172-16-3-190 shells]# cat slow.log |head -n 1
# Time: 180525 0:00:00
[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh
4257796
3
[root@172-16-3-190 shells]# ls -lh slow.log
-rw-r----- 1 root root 571M May 29 18:26 slow.log
[root@172-16-3-190 shells]# cat slow.log |head -n 1
# Time: 180526 0:00:01
其实这是一个比较low的一个技术点,但是慢日志的清理很容易被我们忽略,很多时候开发不会随意上线,DBA也会对慢SQL进行把控并优化,然而当你半夜在睡觉,开发很晚上线一段有问题的代码,这个 时候的后果....,确实有些危险。慢日志功能是我们优化数据库的一个重要的参考,但也要注意慢日志文件的大小的增长速度,避免占据过多的磁盘空间。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx