lepus mysql 慢查询_天兔 -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,需要通过下面的方式来查看,参考截图:

2b0949de403451d4ff9aa67d8a522711.png

注意:

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

f76d92d9c6047c5a132d327d8192d7b3.png

b7c795e6d7f0a35d1ac41b1c94797359.png

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服务器管理里面电击右侧的编辑按钮,进入服务器编辑界面。

b28cec6882a2164b2f91f628ffb0b206.png

配置slowquery为打开状态

eccbd1807168d00ea36fbd6b8063f7e9.png

配置完成后,稍等片刻,即可在慢查询分析平台查看该库的慢查询日志。

01a81899d97136bd3097643d77e016ac.png

e87fb2d9839c7476fb80dafc6f3e257c.png

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主机配置里面设置即可,邮箱留空则该数据库主机不会发送慢查询推送。

部署完成后,在计划任务的时间到达,您就可以看到推送的慢查询邮件了。

邮件格式和内容如下所示:

ea0e9153b3c0dd92416a0c9d52282111.png

06fdede8e4d5b02eb3c317394a035252.png

参考计划任务的书写: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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值