• 天兔 -Lepus 慢查询分析平台配置


    想要实现慢查询查询分析,需要在被监控端安装percona-toolkit工具
     
    1、被监控端安装软件包
    yum -y install perl-IO-Socket-SSL
    yum -y install perl-DBI
    yum -y install perl-DBD-MySQL
    yum -y install perl-Time-HiRes
     
    2、被监控端解压percona-toolkit工具包
    [root@node1 src]# pwd
    /usr/local/src
    [root@node1 src]# tar -xzf percona-toolkit-2.2.12.tar.gz
    [root@node1 src]# ll
    drwxrwxr-x 6 1000 1000 4096 Aug 17 16:19 percona-toolkit-2.2.12
    -rw-r--r-- 1 root root 1392691 Aug 17 16:17 percona-toolkit-2.2.12.tar.gz
    [root@node1 src]# ll
    [root@node1 src]# cd percona-toolkit-2.2.12
    [root@node1 percona-toolkit-2.2.12]# perl Makefile.PL
    [root@node1 percona-toolkit-2.2.12]# make && make install
    安装好之后,pt工具会在/usr/local/bin目录下(不同的pt版本安装的位置可能不同)
     
    3、从监控端的/usr/local/lepus/client/mysql目录下把lepus_slowquery.sh脚本拷贝到被监控端(存放的位置没有要求,可以放在/usr/local/sbin目录下)
    [root@node9 mysql]# scp lepus_slowquery.sh 192.168.2.225:/usr/local/sbin
     
    4、在被监控端编辑scp过来的lepus_slowquery.sh脚本
    [root@node1 sbin]# pwd
    /usr/local/sbin
    [root@node1 sbin]# vim lepus_slowquery.sh         #下面蓝色字体是需要修改的,其他不用修改。
    #config lepus database server         #监控机配置
    lepus_db_host="192.168.2.33"     #监控机的IP
    lepus_db_port=3306     #监控机的端口号
    lepus_db_user="lepus_user"     #监控机的用户名
    lepus_db_password="123456"     #监控机的密码
    lepus_db_database="lepus"     #使用的库
     
    #config mysql server         #被监控端配置
    mysql_client="/usr/local/mysql/bin/mysql"     #mysql软件安装目录下,这个就是平时所用的mysql -uroot -proot123的那个mysql。
    mysql_host="192.168.2.201"     #被监控端的IP
    mysql_port=3306     #被监控端的端口号,生产中不要用这个,用别的
    mysql_user="lepus_monitor"     #远程登录用户名
    mysql_password="123456"     #密码
     
    #config slowqury         #被监控端慢查询日志配置(存放目录)
    slowquery_dir="/log/mysql/"         #MySQL慢日志存放目录,也是被监控端存放lepus分析出来的慢查询日志存放目录
    slowquery_long_time=1         #慢查询时间
    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"         #pt工具软件的安装目录下,安装的时候关注一下安装到的位置。
     
    #config server_id
    lepus_server_id=271         #这个server_id指的是lepus监控平台所分配的id,需要通过下面的方式来查看,参考截图:
    注意:
    lepus_server_id,该值需要从系统中获取。进入MySQL服务器配置,在部署脚本的主机前查询到当前ID即为主机的server_id。
    lepus_server_id必须和MySQL服务器配置里的对应服务器ID一一对应,否则您可能将无法查询到该主机的慢查询。
     
    #collect mysql slowquery log into lepus database
    $pt_query_digest --user=$lepus_db_user --password=$lepus_db_password --port=$lepus_db_port --review h=$lepus_db_host,D=$lepus_db_database,t=mysql_slow_query_review --history h=$lepus_db_host,D=$lepus_db_database,t=mysql_slow_query_review_history --no-report --limit=100% --filter=" $event->{add_column} = length($event->{arg}) and $event->{serverid}=$lepus_server_id " $slowquery_file > /tmp/lepus_slowquery.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 -rf ;
     
    ####END####
    说明:
    vim编辑结束保存之后需要变更脚本格式
    显示当前的格式(默认为dos,这是不能执行的):set ff?
    修改为Unix(变更为unix之后,脚本才可以成功执行):set fileformat=unix
    :wq退出vim编辑器
     
    5、测试,使用存储过程插入1万条数据或者查询一个数十万行的表,查询结束之后手动执行一下这个脚本,这样在监控界面上就可以看到结果了。(测试SQL参见文档底部)
    [root@node1 sbin]# sh lepus_slowquery.sh
     
    6、测试成功之后,加入计划任务。因为慢查询做了按小时的切割,建议计划任务时间间隔在1小时之内。
    [root@node1 sbin]# crontab -e
    crontab: installing new crontab
    [root@node1 sbin]# crontab -l
    */5 * * * * /bin/sh /usr/local/sbin/lepus_slowquery.sh > /dev/null 2>&1
     
    7、开启慢查询分析
    在MySQL服务器管理里面电击右侧的编辑按钮,进入服务器编辑界面。
    配置slowquery为打开状态
    配置完成后,稍等片刻,即可在慢查询分析平台查看该库的慢查询日志。
     
     
    8、开启慢查询自动邮件推送
    慢查询自动推送是指定时将系统收集到的慢查询TOP数据定时推送给相应开发人员或者DBA进行优化,不需要在每台数据库上部署脚本。
    MySQL慢查询自动推送通过计划任务(crontab)完成。如果需要推送,则需要在监控机(lepus所在主机)部署如下计划任务。
    ——注1:www.xxx.com请替换成您自己的lepus监控WEB访问地址,以下只是做一个示范,请勿照搬。
    ——注2:若没有links命令,需要安装:yum -y install links
    示例:
    lepus所在的监控机执行:links http://118.178.191.219:81/index.php/task/send_mysql_slowquery_mail
    此时会在你配置的邮件中收到慢查询的推送信息。
    crontab中的示例:
    00 08 * * * links http://www.xxxx.com/index.php/task/send_mysql_slowquery_mail > /dev/null 2>&1
    我的crontab内容:
    */5 * * * * /usr/bin/links http://118.178.191.219:81/index.php/lp_mysql/slowquery > /dev/null 2>&1
    计划任务部署完成后,则会按照计划任务配置的时间将慢查询推送给对应人员。
    慢查询推送的邮件人员需要在MySQL主机配置里面设置即可,邮箱留空则该数据库主机不会发送慢查询推送。
    部署完成后,在计划任务的时间到达,您就可以看到推送的慢查询邮件了。
    邮件格式和内容如下所示:
     
    参考计划任务的书写:0 8 * * * curl http://118.178.191.219:81/index.php/task/send_mysql_slowquery_mail >/dev/null 2>&1
     
    测试SQL:
    1、创建两张表: part_tab(分区表)、no_part_tab(普通表)
    DROP TABLE IF EXISTS part_tab;
    CREATE TABLE part_tab(
    c1 int default NULL,
    c2 varchar(30) default NULL,
    c3 date not null)
    PARTITION BY RANGE(year(c3))
    (PARTITION p0 VALUES LESS THAN (1995) ,
    PARTITION p1 VALUES LESS THAN (1996) ,
    PARTITION p2 VALUES LESS THAN (1997) ,
    PARTITION p3 VALUES LESS THAN (1998) ,
    PARTITION p4 VALUES LESS THAN (1999) ,
    PARTITION p5 VALUES LESS THAN (2000) ,
    PARTITION p6 VALUES LESS THAN (2001) ,
    PARTITION p7 VALUES LESS THAN (2002) ,
    PARTITION p8 VALUES LESS THAN (2003) ,
    PARTITION p9 VALUES LESS THAN (2004) ,
    PARTITION p10 VALUES LESS THAN (2010) ,
    PARTITION p11 VALUES LESS THAN (MAXVALUE));
     
    DROP TABLE IF EXISTS no_part_tab;
    CREATE TABLE no_part_tab(
    c1 int default NULL,
    c2 varchar(30) default NULL,
    c3 date not null);
     
    2、用存储过程插入800万条数据
    delimiter $$
    drop procedure if exists `load_part_tab` $$
    CREATE PROCEDURE load_part_tab()
    begin
    declare v int default 0;
    while v < 8000000
    do
    insert into part_tab
    values (v,'testingpartitions',adddate('1995-01-01',(rand(v)*36520)mod 3652));
    set v = v + 1;
    end while;
    end$$
    delimiter ;
     
    call load_part_tab();
  • 相关阅读:
    李开复给中国学生的第一封信
    vc++学习篇(三)——预处理命令之条件编译(#ifdef,#else,#endif,#if等)
    高级程序员考试时间安排和参考书推荐
    vc++学习篇(四)—— 指针
    程序员应具备的素质
    Word 2003 长篇文档排版技巧(二)
    Google 技巧集锦
    给中国学生的第二封信
    修复mysql表
    社保相关
  • 原文地址:https://www.cnblogs.com/wangchaolinux/p/11753949.html
Copyright © 2020-2023  润新知