Mysql性能剖析工具--Anemometer部署

搭建Anemometer框架

前置工作:

1.关闭selinux

setenforce 0

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux

2.打开防火墙的443,13306,80端口

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 13306 -j ACCEPT

service iptables save

3.确保时间准确(非必须)

yum install -y ntp ntpdate

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区为东8区

cp: overwrite `/etc/localtime'? y

service ntpdate start

ntpdate: Synchronizing with time server:                  [  OK  ]

[root@Master01 ~]# date -R

Tue, 30 Jan 2018 14:45:34 +0800#+0800是东8区

chkconfig ntpdate on

4.下载anemometer到linux下,修改名字为anemometer

下载路径:https://github.com/box/Anemometer

yum install -y unzip

wget https://github.com/box/Anemometer/archive/develop.zip

unzip develop.zip

mv Anemometer-develop anemometer

5.确认Mysql慢日志已经打开


部署工作

1.安装核心组件pt_query_digest(2.2.14版本)

yum install perl-DBI perl-DBD perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey -y

wget --no-check-certificate https://www.percona.com/downloads/percona-toolkit/2.2.14/RPM/percona-toolkit-2.2.14-1.noarch.rpm

yum install -y percona-toolkit-2.2.14-1.noarch.rpm

2.安装php

注意php必须是5.33以上的版本,否则报错;

安装环境的OS是CentOS6.8,所以直接yum安装的php就是5.33版本

yum install -y php php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel php-fpm php-dba

3.安装httpd

yum install -y httpd

4.修改配置,启动php(不修改时区的话,启动httpd时会报500的错)

vim /etc/php.ini

date.timezone = Asia/Shanghai

service php-fpm start

5.初步配置anemometer

cp -r anemometer /var/www/html/

vim /etc/httpd/conf/httpd.conf

添加ServerName 192.168.40.200:80(anemometer的IP,如果不采用80端口,需要在这里配上其他端口号)

6.执行建库脚本

cd /var/www/html/anemometer

mysql -uroot -p密码 < install.sql


在执行上面这一步的操作的时候,出现了一个报错

这个报错是因为表中的ts_min这一项default为0,这和sql_mode有关

查看系统中的sql_mode

set global sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

修改完成后,可以正常导入


mysql -uroot -p密码

mysql > grant all on slow_query_log.* to 'anemometer'@'%' identified by '密码';

mysql > grant select on *.* to  'anemometer'@'%';

mysql > grant all on slow_query_log.* to 'anemometer'@'localhost';

mysql > grant select on *.* to  'anemometer'@'localhost';

7.将慢日志导入库中(因为这里的pt版本为2.2.14,所以采用大于2.2版本的语句;小于2.2版本的语句自行度娘)

pt-query-digest --user=anemometer --password=密码 --review h=主机名或者主机IP,P=端口,D=slow_query_log,t=global_query_review no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" /data/mysql/mysql3306/data/slow.log

上面标黑的3处注意参照实际情况填写


如果不是默认端口,需要采用下面这个语句(加入P参数)

pt-query-digest --user=anemometer --password=密码 --review h=172.17.100.88,P=13306,D=slow_query_log,t=global_query_review no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" /data/mysql/mysql3306/data/slow.log


完成前面的操作,anemometer的框架就完成了

接下来才是核心部分--数据入库


8.进一步配置anemometer

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

修改第一处:

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

vim /var/www/html/anemometer/conf/config.inc.php  

...

$conf['plugins'] = array(

...

'explain' => function ($sample) {

$conn['port'] = 13306;                                                          --(第269行,其实这个port改不改无所谓)

$conn['host'] = $sample['hostname_max'];

...

$conn['user'] = 'anemometer';                                            --(第285行)

$conn['password'] = '密码';

return $conn;

...

修改第二处:

vim /var/www/html/anemometer/conf/datasource_localhost.inc.php(这个文件就只有这么一小段)

$conf['datasources']['192.168.40.200'] = array(

        'host'  => '192.168.40.200',

        'port'  => 3306,                                                                             (测试了一下,这里也可以不改)

        'db'    => 'slow_query_log',

        'user'  => 'anemometer',

        'password' => '密码',

        'tables' => array(

                'global_query_review' => 'fact',

                'global_query_review_history' => 'dimension'

        ),

        'source_type' => 'slow_query_log'

);


在早期的版本中,这2个配置似乎是在一个php文件下的,在我下载的这个版本里面却是分别配置的,一个是plugin插件,还有一个作为连接用;经测试,2个php文件下的端口项似乎都是可有可无,保险起见我这里还是写成我修改的端口13306.

9.启动apache

service httpd start

打开刚才发布的网页http://192.168.40.200/anemometer

配置脚本自动导入以及多库监控

通过该脚本,anemometer会在一段时间内打开slow.log,并记录这段时间内打开slow.log,随后将这段时间内的slow.log导入slow_query_log中。

需要用到3个配置文件

1.anemometer_collect.sh

这个脚本位于anemometer文件夹的scripts下,如果没有特别的定制需求,涉及到的修改不多,只需要把mysql的路径写明一下(在脚本中加入黑体部分即可)

vim /var/www/html/anemometer/scripts/anemometer_collect.sh

添加

PATH=/usr/local/mysql/bin/:$PATH

2.配置本地读取的cnf

cat /var/www/html/anemometer/scripts/anemometer.local.cnf

[client]

user=anemometer

password=密码

host=localhost

socket=/tmp/mysql3306.sock

3.配置写入的cnf

cat /var/www/html/anemometer/scripts/anemometer.remote.cnf

[client]

user=anemometer

password=密码

port=13306                                                     (如果改变了端口,这里必须配置)

账号的授权

这里图省事,不管是localhost还是%,我都授予了super权限

Mysql性能剖析工具--Anemometer部署_第1张图片

添加计划任务如下

*/1 * * * * /var/www/html/anemometer/scripts/anemometer_collect.sh --interval 59 --history-db-host 192.168.40.200 --defaults-file /var/www/html/anemometer/scripts/anemometer.local.cnf --history-defaults-file /var/www/html/anemometer/scripts/anemometer.remote.cnf


多库的监控

首先每个库都在本地按照上面所写配置好脚本,确保slow.log可以导入到本地的库中

多库监控只需要在anemometer里面配置一个地方

vim /var/www/html/anemometer/conf/datasource_localhost.inc.php

'192.168.40.200',

        'port'  => 3306,

        'db'    => 'slow_query_log',

        'user'  => 'anemometer',

        'password' => '密码',

        'tables' => array(

                'global_query_review' => 'fact',

                'global_query_review_history' => 'dimension'

        ),

        'source_type' => 'slow_query_log'

);

$conf['datasources']['192.168.40.130'] = array(

        'host'  => '192.168.40.130',

        'port'  => 3306,

        'db'    => 'slow_query_log',

        'user'  => 'anemometer',

        'password' => '密码',

        'tables' => array(

                'global_query_review' => 'fact',

                'global_query_review_history' => 'dimension'

        ),

        'source_type' => 'slow_query_log'

);

需要监控多少库,后面就增加多少库的配置就行了


                                                                                                 Done



报错一例:

在另一台机器上对pt-query-digest进行安装,安装完成后,执行pt-query-digest,出现报错

install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted.

Compilation failed in require at (eval 5) line 3.

at /usr/bin/pt-show-grants line 1338

网上的各种说法是perl-DBI或者perl-DBD版本不够新,需要进行重装;

然而发现perl-DBI和DBD都和之前一台完全一致;后来发现老外对于这个问题的讨论提到了mysql-libs,对mysql-libs进行比较,发现2台机器的mysql-libs都是默认的,版本也一致;抱着死马当活马医的心态,重新执行了yum install mysql-libs -y.....发现居然进行了update!(2台机器的os版本一致,mysql版本一致,pt-query-digest版本也一致!估计是这台机器以前执行过某些操作,对mysql-libs有一些影响)

更新完成后,问题完美解决

你可能感兴趣的:(Mysql性能剖析工具--Anemometer部署)