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的工作原理。