【Mysql】一天一個慢日誌

小亮520cl發表於2016-03-18
線上最好的辦法是一天一個慢日誌,便於管理
  1. #!/bin/bash
    log_dir='/home/wwwlogs/mysql_slow'
    test -d  $log_dir
    if [ $? != 0 ];then
    mkdir -p $log_dir
    fi
    FILE=`date --date '1 days ago' +%Y%m%d`
    filename=`date --date '15 days ago' +%Y%m%d`


    /usr/bin/mysql -uroot -p'ppppppp' -h127.0.0.1 -e "set global slow_query_log = off;"
    mv /home/mysql/slow.log $log_dir/slow_log."$FILE"

  2. /usr/bin/mysql -uroot -p'ppppppp' -h127.0.0.1 -e "set global slow_query_log= on;"
    find $log_dir -name "*"$filename"*" -exec rm -f {} \;


切割日誌
  1. #!/usr/bin/bash
    fulldate=`date +%Y%m%d --date="-1 day"`
    echo $fulldate
    halfdate=`date +%y%m%d --date="-1 day"`
    echo $halfdate


    more /home/data/mydata/3307/mysql-slow.log|grep -A 4 "Time: $halfdate">/soft/day_slowlog/3307/slow_log.$fulldate
    more /home/data/mydata/3308/mysql-slow.log|grep -A 4 "Time: $halfdate">/soft/day_slowlog/3308/slow_log.$fulldate



想著分析一下慢日誌,可是一看慢日誌都好幾G了,而且是短日誌格式,找到那個時間點相對比較難。於是寫了一個指令碼從慢日誌按時間提取點日誌。指令碼:
  1. https://github.com/wubx/mysql-binlog-statistic/blob/master/bin/cutlogbytime
  2. 時間需要寫時戳
  3. mysql> select unix_timestamp('2013-04-05');
    +------------------------------+
    | unix_timestamp('2013-04-05') |
    +------------------------------+
    | 1365091200 |
    +------------------------------+
    1 row in set (0.00 sec)


    mysql> select unix_timestamp('2013-04-06');
    +------------------------------+
    | unix_timestamp('2013-04-06') |
    +------------------------------+
    | 1365177600 |
    +------------------------------+
    1 row in set (0.00 sec)


  4. ./cutlogbytime /path/slowlogfile 1365091200 1365177600 > 20130405_slow.log
這樣得到一天的日誌檔案就小一點的也容易分析了。而且可以根據天的檔案,在取一天的某個時間點的日誌。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2059657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章