转载请务必保留超链接 :原文链接
前言:
为什么写这篇文章?
原因如下:
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脚本编写.
网友评论