按日期分割mysql slow log

有些mysql slow log是一个大文件,如果不按日期分开会很查找。
所以写了一个脚本分割。

[quote]
MYSQLSLOW=mysql-slow-new.log
MYSQLSLOW_WORK=mysqlslow_work.log
cp -f $MYSQLSLOW $MYSQLSLOW_WORK
for((i=528;i<=925;i++)); do
split_date=100$i
echo $split_date
let "next_date=$split_date+1"
#echo $next_date
grep -n -m 1 "Time: $next_date " $MYSQLSLOW_WORK
if [ $? -eq 0 ]
then
#found
cut_line=`grep -n -m 1 "Time: $next_date " $MYSQLSLOW_WORK | awk -F: '{print $1-1}'`
#echo $cut_line
max_line=`wc $MYSQLSLOW_WORK | awk '{print $1}'`
let "rest_line=$max_line-cut_line"
head -n $cut_line $MYSQLSLOW_WORK > mysqlslow_$split_date.log
tail -n $rest_line $MYSQLSLOW_WORK > t.log
cp -f t.log $MYSQLSLOW_WORK

echo $rest_line
fi

done
[/quote]

脚本的思路是找到 "Time: xxxxxx" 的日期,如果找5/28,则需要找后一天的第一行再减1,这样用head可以分割出这一天的日志,然后用tail把后面的取出来作为下一次查找。

for((i=528;i<=925;i++)); do
done

实际上是一个数字循环,但不要紧,没找到的将被忽略,不会生成多余文件。另外在月末会生成错误的日期文件,因为是以数字+1,所以找下一天会错误,但只是文件名错,内容是对的,会生成下个月00号的文件名。也可以多加个判断,这里就懒得动了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值