Slowquery图形化显示MySQL慢日志工具搭建

需要安装的步骤如下:

    1、percona-toolkit工具的安装

    2、php web mysql环境的搭建

    # yum install httpd mysql php php-mysql -y

    3、安装Slowquery并配置

    4、导入慢查询日志

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

    6、配置邮件报警

git地址:https://github.com/hcymysql/slowquery
1、percona-toolkit工具的安装
yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
tar zxvf percona-toolkit-3.0.12_x86_64.tar.gz
cd percona-toolkit-3.0.12
perl Makefile.PL
make
make install
vi /etc/profile
export PATH=/root/percona-toolkit-3.0.12/bin
source /etc/profile

或者

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

下载地址:https://www.percona.com/downloads/percona-toolkit/

cd /opt

wget https://www.percona.com/downloads/percona-toolkit/3.0.2/binary/tarball/percona-toolkit-3.0.2_x86_64.tar.gz

tar -zxvf percona-toolkit-3.0.2_x86_64.tar.gz

cd percona-toolkit-3.0.2

perl Makefile.PL

make && make test && make install

如果报:BEGIN failed--compilation aborted at Makefile.PL line 1,需要安装perl-devel

yum install perl-devel

安装后再执行perl Makefile.PL可能会报找不到DBI,DBD-MySQL,IO-Socket-SSL.noarch,perl-Time-HiRes

用下边的方法在线安装:

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-IO-Socket-SSL.noarch

yum install perl-Time-HiRes

然后:

make

make install

pt-table-checksum --help看看是否装成功

2、php web mysql环境的搭建

yum install httpd mysql php php-mysql -y

3、安装Slowquery并配置
mv slowquery /var/www/html/
cd /var/www/html/slowquery/slowquery_table_schema
导入dbinfo_table_schema.sql和slowquery_table_schema.sql表结构文件到你的运维管理机MySQL里。
mysql -uroot -pmypassword sql_db < ./dbinfo_table_schema.sql
mysql -uroot -pmypassword sql_db < ./slowquery_table_schema.sql
录入你要监控的MySQL主库配置信息
例如:
mysql> INSERT INTO sql_db.dbinfo VALUES (1,‘192.168.148.101’,‘test库名’,‘admin’,‘123456’,3306);
修改配置文件soar_con.php,将里面的配置改成你的运维管理机MySQL的地址(用户权限最好是管理员)
cd /var/www/html/slowquery/
vi soar_con.php

<?php

//-test-dsn soar测试环境,用来分析SQL使用
$test_user='root';
$test_pwd='mypassword';
$test_ip='192.168.148.101';
$test_port='3306';
$test_db='test';

 

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

<?php

//将里面的配置改成你的运维管理机MySQL的地址

     $con = mysqli_connect("192.168.148.101","root","mypassword","sql_db","3306") or die("数据库链接错误".mysqli_connect_error());
     mysqli_query($con,"set names utf8");

?>

vi /etc/httpd/conf/httpd.conf
找到DirectoryIndex index.html的位置,在其后面添加index.php,保存退出
service httpd restart

4、导入慢查询日志
进入到slowquery/client_agent_script目录下,把slowquery_analysis.sh脚本拷贝到生产MySQL主库上做慢日志分析推送,并修改里面的配置信息

定时任务(10分钟一次)
cd /var/www/html/slowquery/client_agent_script
vi slowquery_analysis.sh

#!/bin/bash

#改成你的运维管理机MySQL地址(用户权限最好是管理员)
slowquery_db_host="192.168.148.101"
slowquery_db_port="3306"
slowquery_db_user="root"
slowquery_db_password="mypassword"
slowquery_db_database="sql_db"

#改成你的生产MySQL主库地址(用户权限最好是管理员)
mysql_client="/usr/local/mysql/bin/mysql"
mysql_host="192.168.148.101"
mysql_port="3306"
mysql_user="root"
mysql_password="mypassword"

#改成你的生产MySQL主库慢查询目录和慢查询执行时间(单位秒)
slowquery_dir="/data/mysql/data/slow.log/"
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="/root/percona-toolkit-3.0.12/bin/pt-query-digest"

#改成你的生产MySQL主库server_id
mysql_server_id=148101

#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####

crontab -e

*/10 * * * * /bin/bash /var/www/html/slowquery/client_agent_script/slowquery_analysis.sh > /dev/null 2>&1

5、访问界面,查看慢查询
打开浏览器访问http://192.168.148.101/slowquery/slowquery.php


6、配置邮件报警
cd /var/www/html/slowquery/alarm_mail
vi sendmail.php

<?php

$get_mail_content = get_include_contents('get_top100_slowsql.php');

function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

    $smtpserver = "smtp.126.com";//SMTP服务器
    $smtpserverport = 25;//SMTP服务器端口
    $smtpusermail = "[email protected]";//SMTP服务器的用户邮箱
    $smtpemailto = '[email protected]';//发送给谁
    $smtpuser = "[email protected]";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名
    $smtppass = "123456";//SMTP服务器的授权码
    $mailtitle='【告警】慢查询报警推送TOP100条,请及时优化.';
    $mailcontent='下面的慢查询语句或许会影响到数据库的稳定性和健康性,请您在收到此邮件后及时优化语句或代码。数据库的稳定性需要大家的共同努力,感谢您的配合!<br><br>' .$get_mail_content .'<br><br>该邮件由slowquery系统自动发出,请勿回复,
语句详细执行情况请登录<a href="http://xxxxx">slowquery系统查看.<br><br>';

system("./sendEmail -f $smtpusermail -t $smtpemailto  -s $smtpserver:$smtpserverport -u '$mailtitle' -o message-charset=utf8 -o message-content-type=html -m '$mailcontent' -xu $smtpusermail  -xp '$smtppass'");

也可以参:   https://dbaplus.cn/news-11-2520-1.html

                   

发布了216 篇原创文章 · 获赞 89 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/eagle89/article/details/105089379
今日推荐