按日期分割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号的文件名。也可以多加个判断,这里就懒得动了。

猜你喜欢

转载自magicgod.iteye.com/blog/771641