现在我有N台mysql服务器,每台mysql服务器均有一个slow_query_log_file。我的目的就是将每台mysql服务器上面的slow_log集中到指定的机器上面用mysqlsla分析,并根据需求找出查询时间最长的query,以便以后进行优化。我遇到的问题是:现在每台机器的slow-log都非常的大,以后肯定会越来越大,这样在日志传输与分析中肯定非常的耗时,所以我就想将slow-log每个星期切换一次,先mv $slow_log_file file_%date,然后touch $slow_log_file,在不关闭数据库的情况下这样重命名会导致mysql不正常运行么?想问问大家都是怎么处理类似问题的?有没有什么聪明的办法?谢谢。。

解决方案 »

  1.   

    把以下代码放在crontab里面 每天0点执行 #!/bin/bashsource ~/.bash_profile# define common variableslog_home="/home/mysql/logs/"
    cur_access_log="mysql_slow.log"
    host_prefix=`uname -n | awk -F . '{print $1}'`export TZ=CST-7
    achive_time=`date "+%Y%m%d"`
    achive_access_log="${host_prefix}.mysqlslow_${achive_time}.log"
    unset TZcd ${log_home}# rotate log
    cp ${cur_access_log} ${achive_access_log}# clean up current log
    cp /dev/null ${cur_access_log}
      

  2.   

    # rotate log
    cp ${cur_access_log} ${achive_access_log}1,这样拷贝的同时,${cur_access_log}中的数据也同时增长,这样不就数据不同步了么?
    2,如果cp ${cur_access_log} ${achive_access_log}运行不成功。那么cp /dev/null ${cur_access_log}不就slowlog全部丢失了么?还有,我用mysqlsla的时候,有些sql statement 没有显示database,请问有啥好办法?