pt-query-digest+Anemometer实现MySQL慢查询可视化

1.      安装pt-query-digest

pt-query-digest是percona-toolkit里面一个工具,其作用就是分析慢查询日志,将MySQL慢查询日志进行统计并友好的显示出来。

# wget https://www.percona.com/downloads/percona-toolkit/2.2.17/RPM/percona-toolkit-2.2.17-1.noarch.rpm

# rpm -ivh percona-toolkit-2.2.17-1.noarch.rpm

# which pt-query-digest

/usr/bin/pt-query-digest

至此,pt-query-digest安装完毕

 

2.      安装LAMP,咱是专门搞MySQL的,所以MySQL就不要用yum安装啦,MySQL安装这里就不描述了,相信用到这个工具的人MySQL安装应该是轻车熟路啊

yum install php httpd

# rpm -qa |grep php //php版本需要大于5.3,并且需要下列组件,如果缺少组件,可以到sohu镜像源去下载

http://mirrors.sohu.com/centos/6/os/x86_64/Packages

在这里面搜索想要的包,直接下载安装就可以

php-dba-5.3.3-40.el6_6.x86_64

php-bcmath-5.3.3-40.el6_6.x86_64

php-common-5.3.3-40.el6_6.x86_64

php-pdo-5.3.3-40.el6_6.x86_64

php-5.3.3-40.el6_6.x86_64

php-gd-5.3.3-40.el6_6.x86_64

php-cli-5.3.3-40.el6_6.x86_64

php-mysql-5.3.3-40.el6_6.x86_64

 

MySQL中授权,一般按照最小原则授权,对于这样一个系统,我就给个最大权限了

mysql> grant all on *.* to 'thunder'@'%' identifiedby 'thunder';flush privileges;

 

3.    安装Anemometer并配置

下载地址: https://github.com/box/Anemometer

下载完后名为:Anemometer-master.zip

# unzip Anemometer-master.zip

# mv Anemometer-master /var/www/html/anemometer

 

#导入初始化数据,也就是表结构,这一步并验证MySQL用户授权是否正确

# mysql -h127.0.0.1 -P3308 -uthunder -pthunder </var/www/html/anemometer/install.sql

 

#修改配置文件

# cd /var/www/html/anemometer/conf

# cp sample.config.inc.php config.inc.php

# vim config.inc.php //修改文件中是2处



  

4.      启动HTTP服务,访问界面

# /etc/init.d/httpd start

访问界面

http://10.237.81.192/anemometer

观察是否可以看到正常界面,如果看不到,查看http错误日志,我这遇到个错误

[Fri Apr 22 17:39:47 2016][error] [client 10.237.13.148] PHP Warning: date_default_timezone_get(): It is not safe to rely on the system'stimezo

ne settings. You are*required* to use the date.timezone setting or the date_default_timezone_set()function. In case you used any of those method

s and you are still gettingthis warning, you most likely misspelled the timezone identifier. We selected'Asia/Chongqing' for 'CST/8.0/no DST' in

stead in/var/www/html/anemometer/lib/Anemometer.php on line 48

大概意思就是php时区的问题,改下php配置文件里的时区就可以了

vim /etc/php.ini


#重启http服务

# /etc/init.d/httpd restart

再刷新就看到界面了。

至此,所有的服务都已经安装完了,但是打开的界面里面没有数据,这时就用到我们最开始安装的pt-query-digest工具来导入数据了。

5.      导入慢查询数据

 pt-query-digest--user=thunder --password=thunder --port=3308 --reviewh=127.0.0.1,D=slow_query_log,t=global_query_review --historyh=127.0.0.1,D=slow_query_log,t=global_query_review_history --no-report--limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\""  /tmp/slow-query.log.20160422

执行不报错,再打开页面就有数据了,可以把这个URL交给开发,让他们自己查看有哪些SQL比较慢

 

上面导入数据的命令一般配置定时任务,每隔多久将慢日志导入到数据库中,这个可以根据自己的需求去定制了

经测试,重复对一个慢日志文件分析,最新的慢日志记录不会插入到数据库中,所以页面中也就没有相关的纪录,不知道你们是不是这样的。

可以用日志切割工具logrotate来自动切割慢日志,并在切割后自动执行分析命令,mysql.slow.conf 配置文件如下:

/export/mysql/mysql3307/logs/slow.log
{
create 660 mysql mysql
su root mysql
dateext
daily
missingok
rotate 360
notifempty
copytruncate


postrotate
/usr/bin/pt-query-digest --user=thunder--password=thunder \
                         --review h=127.0.0.1,D=slow_query_log,t=global_query_review \
                         --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history \
                         --no-report --limit=0% \
                         --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \
                         /export/mysql/mysql3307/logs/slow.log-$(date +%Y%m%d)
endscript
}

可能通过定时任务来执行logrotate -f mysql.slow.conf,也可以将配置文件放到/etc/logrotate.d下,具体请查看logrotate的工作原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值