zoukankan      html  css  js  c++  java
  • 使用Anemometer基于pt-query-digest将MySQL慢查询可视化

    最近玩MySQL,发现了一个很不错的工具,可以把MySQL慢查询可视化,方便我们去找出和分析慢询语句,搭建的步骤不多,但网上详细教程比较少,说得也不够详细,一不小心,估计得蛋痛一会,哈哈

    Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务,主要包括:
    1、验证主节点和复制数据的一致性
    2、有效的对记录行进行归档
    3、找出重复的索引
    4、总结 MySQL 服务器
    5、从日志和 tcpdump 中分析查询
    6、问题发生时收集重要的系统信息

    一、PT安装:

    方法一:rpm包安装

    [root ~]$ wget http://www.percona.com/downloads/percona-toolkit/LATEST/RPM/percona-toolkit-2.2.12-1.noarch.rpm
    [root ~]$ yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes -y
    [root ~]$ rpm -ivh percona-toolkit-2.2.12-1.noarch.rpm                    
    warning: percona-toolkit-2.2.12-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
    Preparing...                ########################################### [100%]
       1:percona-toolkit        ########################################### [100%]

    如果yum 安装不上依赖包,则检查下epel源,也可以查看http://www.cnblogs.com/xuanzhi201111/p/4040761.html去解决!

    方法二:源码包安装

    [root ~]$ wget http://www.percona.com/downloads/percona-toolkit/2.2.12/deb/percona-toolkit_2.2.12.tar.gz
    [root ~]$tar zxf  percona-toolkit_2.2.12.tar.gz
    [root ~]$cd percona-toolkit_2.2.12
    [root percona-toolkit-2.2.12]$perl Makefile.PL
    [root percona-toolkit-2.2.12]$ make && make install

    工具安装目录在:/usr/local/bin

    二、下载Anemometer
    官网:https://github.com/box/Anemometer

    三、安装httpd php,php版本要大于5.3,否则就报错,除此之外还需要:bcmath,php必须支持pdo_mysql、php_mysqli模块,下面我们来安装一下:

    [root ~]$ yum install  httpd php *bcmath* *mysqli*  -y

    如果epel源像以下的,说明是旧的,该源没有php_mysqli相关模块的

    [root yum.repos.d]$ rpm -q epel-release
    epel-release-5-4.noarch

    以下版本才有:

    [root yum.repos.d]$ rpm -q epel-release
    epel-release-6-8.noarch

    我的mysql早已经安装好了的,这里就不多说了

    四、将Anemometer文件包解压,重命名为anemometer,并移动到/var/www/html 下(apache默认路径)

    [root ~]$ unzip Anemometer-master.zip
    [root ~]$ mv Anemometer-master /var/www/html/anemometer

    五、导入anemometer目录下的install.sql,并给该库对应的权限:

    [root anemometer]$ pwd
    /var/www/html/anemometer
    [root anemometer]$  mysql -uroot -p123456 -S /data/mysql-5.5.40/mysql.sock <./mysql56-install.sql
    mysql> grant all on slow_query_log.* to 'anemometer'@'%' identified by '123456';
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> grant all on slow_query_log.* to 'anemometer'@'localhost' identified by '123456';  
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>  grant select on *.* to  'anemometer'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant all on slow_query_log.* to 'anemometer'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant select on *.* to  'anemometer'@'localhost';
    Query OK, 0 rows affected (0.00 sec)


    六、修改可以视化界面的配置信息

    修改php配置,vim /etc/php.ini添加以下内容,(如果本来就有;extension = mysqli.so,只需要把分号去掉即可,我的是yum安装的,本来没有,所以自己加)

    修改apache的配置文件,vim /etc/httpd/conf/httpd.conf

    [root conf]$ cat /etc/httpd/conf/httpd.conf  |grep "ServerName"
    # ServerName gives the name and port that the server uses to identify itself.
    ServerName 192.168.1.128:80

    重启httpd,访问不了,看httpd的日志报以下错:

    date_default_timezone_set(): Timezone ID 'CST' is invalid in /var/www/html/anemometer/lib/Anemometer.php on line 47
    [Fri Nov 28 15:47:57 2014] [error] [client 192.168.1.1] PHP Warning:  date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the d
    ate_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST'
    instead in /var/www/html/anemometer/lib/Anemometer.php on line 48

    修改下/etc/php.ini

    如果重启httpd,还是访问不了,日志还是报同时区的错误,则再修改以下的:

    vim /var/www/html/anemometer/lib/Anemometer.php +47  添加下内容:

    访问:http://192.168.1.128/anemometer,会提示没有global_query_review表,哈哈,别着急哈^.^

    七、将慢查询日志通过pt-query-digest分析后存入数据库中:

    [root ~]$ pt-query-digest --user=anemometer --password=123456 --socket=/data/mysql-5.5.40/mysql.sock 
    > --review h=localhost,D=slow_query_log,t=global_query_review 
    > --history h=localhost,D=slow_query_log,t=global_query_review_history  
    > --no-report --limit=0% --filter=" $event->{Bytes} = length($event->{arg}) and $event->{hostname}="$HOSTNAME"" /data/mysql-5.5.40/localhost-slow.log

    如果你的mysql是通过sock方式连接的话,必须加上--socket指定sock文件,执行完以上的命令,数据库里就会多出global_query_review 表和global_query_review_history表了

    详细导入可以查看官方帮助文档和表属性说明:

    http://www.mysqlperformanceblog.com/2012/08/28/hidden-columns-of-query_review_history/

    http://code.google.com/p/maatkit/wiki/EventAttributes


    回到web端查看:

    想了解更多功能,或者怎么使用,这要看大家了^.^

    可以参考文章:

    https://github.com/box/Anemometer

    http://blog.itpub.net/26355921/viewspace-1162415/

    作者:陆炫志

    出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111

    您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

  • 相关阅读:
    jQuery全屏滚动插件fullPage.js
    通过定位实现子元素相对于父元素上下左右居中
    TermDocs
    IndexWriter
    lucene demo引出的思考
    第一个LUCENE程序
    lucene3.5的查询语法
    更改只读文件属性为正常
    设置WINDOWS2003服务器的允许外界访问端口,远程桌面的端口更改
    Cookie在域中的读写实现顶级域共享
  • 原文地址:https://www.cnblogs.com/xuanzhi201111/p/4128894.html
Copyright © 2011-2022 走看看