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

搭建Anemometer框架

前置工作:

1.關(guān)閉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.確保時(shí)間準(zhǔn)確(非必須)

yum install -y ntp ntpdate

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime?#修改時(shí)區(qū)為東8區(qū)

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區(qū)

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.確認(rèn)Mysql慢日志已經(jīng)打開


部署工作

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以上的版本,否則報(bào)錯(cuò);

安裝環(huán)境的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.修改配置,啟動(dòng)php(不修改時(shí)區(qū)的話,啟動(dòng)httpd時(shí)會(huì)報(bào)500的錯(cuò))

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端口,需要在這里配上其他端口號(hào))

6.執(zhí)行建庫腳本

cd?/var/www/html/anemometer

mysql -uroot -p密碼 < install.sql


在執(zhí)行上面這一步的操作的時(shí)候,出現(xiàn)了一個(gè)報(bào)錯(cuò)

這個(gè)報(bào)錯(cuò)是因?yàn)楸碇械膖s_min這一項(xiàng)default為0,這和sql_mode有關(guān)

查看系統(tǒng)中的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';

修改完成后,可以正常導(dǎo)入


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.將慢日志導(dǎo)入庫中(因?yàn)檫@里的pt版本為2.2.14,所以采用大于2.2版本的語句;小于2.2版本的語句自行度娘)

pt-query-digest --user=anemometer --password=密碼 --review h=主機(jī)名或者主機(jī)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

上面標(biāo)黑的3處注意參照實(shí)際情況填寫


如果不是默認(rèn)端口,需要采用下面這個(gè)語句(加入P參數(shù))

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的框架就完成了

接下來才是核心部分--數(shù)據(jù)入庫


8.進(jìn)一步配置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行,其實(shí)這個(gè)port改不改無所謂)

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

...

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

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

return $conn;

...

修改第二處:

vim /var/www/html/anemometer/conf/datasource_localhost.inc.php(這個(gè)文件就只有這么一小段)

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

? ? ? ? 'host'? => '192.168.40.200',

? ? ? ? 'port'? => 3306,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(測(cè)試了一下,這里也可以不改)

? ? ? ? 'db'? ? => 'slow_query_log',

? ? ? ? 'user'? => 'anemometer',

? ? ? ? 'password' => '密碼',

? ? ? ? 'tables' => array(

? ? ? ? ? ? ? ? 'global_query_review' => 'fact',

? ? ? ? ? ? ? ? 'global_query_review_history' => 'dimension'

? ? ? ? ),

? ? ? ? 'source_type' => 'slow_query_log'

);


在早期的版本中,這2個(gè)配置似乎是在一個(gè)php文件下的,在我下載的這個(gè)版本里面卻是分別配置的,一個(gè)是plugin插件,還有一個(gè)作為連接用;經(jīng)測(cè)試,2個(gè)php文件下的端口項(xiàng)似乎都是可有可無,保險(xiǎn)起見我這里還是寫成我修改的端口13306.

9.啟動(dòng)apache

service httpd start

打開剛才發(fā)布的網(wǎng)頁http://192.168.40.200/anemometer

配置腳本自動(dòng)導(dǎo)入以及多庫監(jiān)控

通過該腳本,anemometer會(huì)在一段時(shí)間內(nèi)打開slow.log,并記錄這段時(shí)間內(nèi)打開slow.log,隨后將這段時(shí)間內(nèi)的slow.log導(dǎo)入slow_query_log中。

需要用到3個(gè)配置文件

1.anemometer_collect.sh

這個(gè)腳本位于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? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(如果改變了端口,這里必須配置)

賬號(hào)的授權(quán)

這里圖省事,不管是localhost還是%,我都授予了super權(quán)限

添加計(jì)劃任務(wù)如下

*/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


多庫的監(jiān)控

首先每個(gè)庫都在本地按照上面所寫配置好腳本,確保slow.log可以導(dǎo)入到本地的庫中

多庫監(jiān)控只需要在anemometer里面配置一個(gè)地方

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'

);

需要監(jiān)控多少庫,后面就增加多少庫的配置就行了


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Done



報(bào)錯(cuò)一例:

在另一臺(tái)機(jī)器上對(duì)pt-query-digest進(jìn)行安裝,安裝完成后,執(zhí)行pt-query-digest,出現(xiàn)報(bào)錯(cuò)

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

網(wǎng)上的各種說法是perl-DBI或者perl-DBD版本不夠新,需要進(jìn)行重裝;

然而發(fā)現(xiàn)perl-DBI和DBD都和之前一臺(tái)完全一致;后來發(fā)現(xiàn)老外對(duì)于這個(gè)問題的討論提到了mysql-libs,對(duì)mysql-libs進(jìn)行比較,發(fā)現(xiàn)2臺(tái)機(jī)器的mysql-libs都是默認(rèn)的,版本也一致;抱著死馬當(dāng)活馬醫(yī)的心態(tài),重新執(zhí)行了yum install mysql-libs -y.....發(fā)現(xiàn)居然進(jìn)行了update?。?臺(tái)機(jī)器的os版本一致,mysql版本一致,pt-query-digest版本也一致!估計(jì)是這臺(tái)機(jī)器以前執(zhí)行過某些操作,對(duì)mysql-libs有一些影響)

更新完成后,問題完美解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容