美文网首页数据库知识点MySQL
LNMP下Anemometer基于pt-query-digest

LNMP下Anemometer基于pt-query-digest

作者: 平常xin | 来源:发表于2017-11-26 17:57 被阅读311次

    转载请务必保留超链接 :原文链接  

    前言:

    为什么写这篇文章?

    原因如下:

    1、Anemometer是个好东西。

    2、希望各位同行在第一次安装和使用Anemometer的时候少走坑。

    简介:

    Anemometer是MySQL慢速查询监视器。此工具用于分析从MySQL实例收集的慢速查询日志,在Web界面可以直观查看MySQL日志,便于查询和分析慢SQL语句,起到了优化数据库的作用。

    官网: https://github.com/box/Anemometer

    在Centos7_64位系统下的安装

    一: 通过yum 安装 Nginx/1.12.2

    1、先安装Nginx的依赖包

    yum install -y pcre pcre-devel

    yum install -y zlib zlib-devel

    yum install -y openssl openssl-devel

    2、开始安装Nginx

    下载安装包

    wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    安装Nginx库

    rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

    安装Nginx

    yum install nginx

    启动Nginx服务

    service nginx start

    查看Nginx状态

    service nginx status

    查看Nginx版本

    nginx -v

    二:编译安装PHP7.1.0

    1、安装epel-release

    rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

    2、下载PHP7.1.0

    wget http://cn2.php.net/distributions/php-7.1.0.tar.gz

    3、解压PHP7.1.0

    tar -xvf php-7.1.0.tar.gz

    4、进入PHP目录

    cd php-7.1.0

    5、安装依赖包

    yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel

    6、编译默认配置

    ./configure

    7、正式安装

    make && make install

    8、配置环境变量

    vim /etc/profile, 在PATH最后面加上":/usr/local/php/bin"

    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/usr/local/php/bin

    source /etc/profile

    9、配置php-fpm

    cp php.ini-production /etc/php.ini

    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

    chmod +x /etc/init.d/php-fpm

    10、启动php-fpm

    /etc/init.d/php-fpm start

    三:数据库版本为MySQL5.7.19,安装过程省略,MySQL的安装对DBA来说简单就是 So easy。

    四:安装和使用Anemometer

    1、下载和安装percona toolkit包

    yum install –y perl-DBD-MySQL.x86_64

    wget https://www.percona.com/downloads/percona-toolkit/3.0.4/binary/redhat/7/x86_64/percona-toolkit-3.0.4-1.el7.x86_64.rpm

    yum -y install  percona-toolkit-3.0.4-1.el7.x86_64.rpm

    pt-query-digest --version

    2、切换到Nginx web服务器默认目录

    cd /usr/share/nginx/html

    3、从官网下载压缩包

    git clone git://github.com/box/Anemometer.git anemometer

    4、创建存储慢查询信息需要的数据库(slow_query_log)和数据表(global_query_review、global_query_review_history)

    cd anemometer

    mysql < ./install.sql

    5、慢查询数据载入数据库中

    先给用户授权:

    mysql > grant all privileges on *.* to 'anemometer'@'%' identified by '123456abc';

    mysql > grant all privileges on *.* to 'anemometer_explain'@'%' identified by '123456abc';

    注 : 创建'anemometer_explain'@'%' 用户的目的是用于 查询执行计划的时候用到,不然后面plugins 标签的不能使用造成 查询 慢SQL的explain 失败。

    执行pt-query-digest +参数, 将慢查询日志中的信息导入数据表中:

    pt-query-digest --user=anemometer --password=123456abc --review h=192.168.1.23,D=slow_query_log,t=global_query_review --history h=192.168.1.23,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/mysql3306/data/slow.log

    备注: "D"表示数据库、"t"表示表名(运行 mysql < ./install.sql 自动创建该数据库和数据表)、 "/data/mysql/mysql3306/data/slow.log" 表慢查询日志的路径

    6、访问站点出现"Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'slow_query_log.dimension.sample' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (1055)"

    解决办法: 需要将sql_mode 中only_full_group_by 关闭, 编辑数据库配置文件, 添加以下内容

    sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    OK,问题解决.

    7、查看SQL执行计划, 建表语句和对慢查询SQL发表自己的Review等等.

    需要配置 config.inc.php 文件, 添加用户名和密码

    $conf['plugins'] = array(

      ...

      'explain'       =>      function ($sample) {

      $conn['user'] = 'anemometer';

      $conn['password'] = '123456abc';

       return $conn;

    },

    );

    接下来就可以查看explain 执行计划了,如下图

    8:创建自动收集慢日志脚本

    在 anemometer项目目录下的scripts/anemometer_collect.sh集合脚本,可以通过crontab进行定时收集慢日志, 下面讲解相关配置:

    scripts/anemometer_collect.sh 脚本的配置如下:

    local.cnf 和 server.cnf 文件的配置如下:

    [client]

    user=anemometer

    password=123456abc

    可以先手动调试看看脚本能否正常执行收集慢查询记录, cd /usr/share/nginx/html/anemometer/scripts 到脚本目录下, 执行以下命令

    bash -x anemometer_collect.sh --interval 30 --history-db-host 192.168.1.23

    接下来配置crontab计划任务进行定时收集慢日志, 执行命令 crontab -e, 然后加上要执行的脚本和频率

    */2 * * * * sh /usr/share/nginx/html/anemometer/scripts/anemometer_collect.sh --interval 30 --history-db-host 192.168.1.23 >> /tmp/log/anemometer.log

    同时还要监控 crontab 计划任务是否正常执行, 执行命令:

     tail -f /var/log/cron

    补充:

    1、搭建Anemometer站点在Nginx的nginx.conf配置如下

    总结:   Anemometer是一个非常好的 监控数据库慢查询 可视化工具, 源码是纯PHP脚本编写. 

    相关文章

      网友评论

        本文标题:LNMP下Anemometer基于pt-query-digest

        本文链接:https://www.haomeiwen.com/subject/cpbkbxtx.html