mysql slow-log大文件切分问题

lanowen 2012-03-30 02:57:39
现在我有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不正常运行么?想问问大家都是怎么处理类似问题的?有没有什么聪明的办法?谢谢。。
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanowen 2012-03-30
  • 打赏
  • 举报
回复
# 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,请问有啥好办法?

rucypli 2012-03-30
  • 打赏
  • 举报
回复
不会导致mysql不正常运行
rucypli 2012-03-30
  • 打赏
  • 举报
回复
把以下代码放在crontab里面 每天0点执行

#!/bin/bash

source ~/.bash_profile

# define common variables

log_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 TZ

cd ${log_home}

# rotate log
cp ${cur_access_log} ${achive_access_log}

# clean up current log
cp /dev/null ${cur_access_log}

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧