您的位置:首页 > 数据库 > MySQL

dba+开源工具:图形化显示MySQL慢日志 - MySQL

2019-03-07 00:00 429 查看
     

Slowquery工具搭建背景

 

由于天兔Lepus慢查询工具是运行在PHP CI框架里,而不是作为一个独立的web页面接口,所以想直接接入自动化运维平台里,移植代码比较困难,固考虑重构。

 

参考了开源工具Anemometer图形展示思路,并且把小米Soar工具集成进去,开发在页面上点击慢SQL,就会自动反馈优化建议,从而降低DBA人肉成本,同时也支持自动发送邮件报警功能。

 

agent客户端慢日志采集分析是结合Percona pt-query-digest工具来实现。

 

工具地址:

https://github.com/hcymysql/slowquery

 

     

安装步骤

 

需要安装的步骤如下:

 

    1、percona-toolkit工具的安装

    2、php web mysql环境的搭建

    # yum install httpd mysql php php-mysql -y

    3、安装Slowquery并配置

    4、导入慢查询日志

    5、访问界面,查看慢查询

    6、配置邮件报警

 

     

工具搭建配置

 

1、移动到web目录

 

 # mv  slowquery  /var/www/html/

 

2、进入slowquery/slowquery_table_schema目录下,导入dbinfo_table_schema.sql和slowquery_table_schema.sql表结构文件到你的运维管理机MySQL里。

注:dbinfo表是保存生产MySQL主库的配置信息。

 

例:

 

# mysql -uroot -p123456 sql_db < ./dbinfo_table_schema.sql

# mysql -uroot -p123456 sql_db < ./slowquery_table_schema.sql

 

录入你要监控的MySQL主库配置信息。

 

例:

 

mysql> INSERT INTO sql_db.dbinfo VALUES

(1,'192.168.148.101','test','admin','123456',3306);

 

3、修改配置文件config.php,将里面的配置改成你的运维管理机MySQL的地址(用户权限最好是管理员)。

 

例:

 

$con = mysqli_connect("192.168.148.9","admin","123456","sql_db","3306") or die("数据库链接

错误".mysqli_connect_error());  

 

4、修改配置文件soar_con.php,将里面的配置改成你的运维管理机MySQL的地址(用户权限最好是管理员)。

 

例:

 

//-test-dsn soar测试环境,用来分析SQL使用

$test_user='admin';

$test_pwd='123456';

$test_ip='192.168.148.9';

$test_port='3306';

$test_db='test';

 

5、进入到slowquery/client_agent_script目录下,把slowquery_analysis.sh脚本拷贝到生产MySQL主库上做慢日志分析推送,按照下面的例子做修改:

 

 

#!/bin/bash

#改成你的运维管理机MySQL地址(用户权限最好是管理员)

slowquery_db_host="192.168.148.9"

slowquery_db_port="3306"

slowquery_db_user="admin"

slowquery_db_password="123456"

slowquery_db_database="sql_db"

 

#改成你的生产MySQL主库地址(用户权限最好是管理员)

mysql_client="/usr/local/mysql/bin/mysql"

mysql_host="192.168.148.1"

mysql_port="3306"

mysql_user="admin"

mysql_password="123456"

 

#改成你的生产MySQL主库慢查询目录和慢查询执行时间(单位秒)

slowquery_dir="/data/mysql/yourDB/slowlog/"

slowquery_long_time=2

slowquery_file=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password  -e "show

variables like 'slow_query_log_file'"|grep log|awk '{print $2}'`

 

pt_query_digest="/usr/local/bin/pt-query-digest"

 

#改成你的生产MySQL主库server_id

mysql_server_id=270

 

#collect mysql slowquery log into slowquery database

$pt_query_digest --user=$slowquery_db_user --password=$slowquery_db_password --port=$slowquery_db_port

--review h=$slowquery_db_host,D=$slowquery_db_database,t=mysql_slow_query_review  --history

h=$slowquery_db_host,D=$slowquery_db_database,t=mysql_slow_query_review_history  --no-report

--limit=100% --filter=" \$event->{add_column} = length(\$event->{arg}) and 

\$event->{serverid}=$mysql_server_id " $slowquery_file > /tmp/slowquery_analysis.log

 

##### set a new slow query log ###########

tmp_log=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "select

concat('$slowquery_dir','slowquery_',date_format(now(),'%Y%m%d%H'),'.log');"|grep log|sed -n -e '2p'`

 

#config mysql slowquery

$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "set global

slow_query_log=1;set global long_query_time=$slowquery_long_time;"

$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "set global

slow_query_log_file = '$tmp_log'; "

 

#delete log before 7 days

cd $slowquery_dir

/usr/bin/find ./ -name 'slowquery_*' -mtime +7|xargs rm -f ;

 

####END####

 

定时任务(10分钟一次)。

 

 */10 * * * * /bin/bash /usr/local/bin/slowquery_analysis.sh > /dev/null 2>&1

 

6、别的就没啥配置的了,直接打开浏览器访问slowquery.php就OK了。

 

 

查找某一个库的具体信息:

 

 

点击+号,点下面的SQL,会调用Soar反馈优化建议:

 

 

Soar有的SQL我发现不能显示Explain,所以我用PHP多显示了一次:

 

 

 

7、慢查询邮件推送报警配置。进入到slowquery/alarm_mail/目录里,修改sendmail.php配置信息。

 

例:

 

$smtpserver = "smtp.126.com";//SMTP服务器

$smtpserverport = 25;//SMTP服务器端口

$smtpusermail = "chunyang_he@126.com";//SMTP服务器的用户邮箱

$smtpemailto = 'chunyang_he@126.com';//发送给谁

$smtpuser = "chunyang_he@126.com";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名

$smtppass = "123456";//SMTP服务器的授权码

 

定时任务(每隔3小时慢查询报警推送一次)。

 

 

0 */3 * * * cd /var/www/html/slowquery/alarm_mail;

/usr/bin/php  /var/www/html/slowquery/alarm_mail/sendmail.php > /dev/null 2>&1

 

 

在线演示:

http://fander.jios.org:8008/slowquery/slowquery.php

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: