按日期瓜分mysql slow log

按日期分割mysql slow log

有些mysql slow log是一个大文件,如果不按日期分开会很查找。

所以写了一个脚本分割。

引用

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

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

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

done

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

按日期瓜分mysql slow log

相关文章:

你感兴趣的文章:

标签云: