改进版
可以建立主从机制,在从上执行慢查询语句分析
主
<code>cat </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>sbin</code><code>/</code><code>lepus_slowquery.sh</code>
<code>#!/bin/bash</code>
<code>#****************************************************************#</code>
<code># ScriptName:/usr/local/sbin/lepus_slowquery.sh</code>
<code># Create Date:2014-03-25 10:01</code>
<code># Modify Date:2014-03-25 10:01</code>
<code>#***************************************************************#</code>
<code> </code>
<code>#configlepus database server监控机</code>
<code>lepus_db_host</code><code>=</code><code>"172.1.1.197"</code>
<code>lepus_db_port</code><code>=</code><code>3306</code>
<code>lepus_db_user</code><code>=</code><code>"lepus_user"</code>
<code>lepus_db_password</code><code>=</code><code>"lepus_password"</code>
<code>lepus_db_database</code><code>=</code><code>"lepus"</code>
<code>#configmysql server被监控机</code>
<code>mysql_client</code><code>=</code><code>"/opt/mysql/bin/mysql"</code>
<code>mysql_host</code><code>=</code><code>"172.1.1.221"</code>
<code>mysql_port</code><code>=</code><code>3306</code>
<code>mysql_user</code><code>=</code><code>"lepus_monitor"</code>
<code>mysql_password</code><code>=</code><code>"lepus_password"</code>
<code>#configslowqury慢日志位置</code>
<code>slowquery_dir</code><code>=</code><code>"/home/log/mysql/"</code>
<code>slowquery_long_time</code><code>=</code><code>0.5</code>
<code>slowquery_file</code><code>=</code><code>`$mysql_client </code><code>-</code><code>h$mysql_host </code><code>-</code><code>P$mysql_port </code><code>-</code><code>u$mysql_user </code><code>-</code><code>p$mysql_password </code><code>-</code><code>e </code><code>"show variables like'slow_query_log_file'"</code><code>|grep log|awk </code><code>'{print $2}'</code><code>`</code>
<code>pt_query_digest</code><code>=</code><code>"/usr/local/bin/pt-query-digest"</code>
<code>#config server_id被监控机id从lepus图形界面看</code>
<code>lepus_server_id</code><code>=</code><code>275</code>
<code>#collect mysqlslowquery log into lepus database</code>
<code>#$pt_query_digest --user=$lepus_db_user --password=$lepus_db_password --port=$lepus_db_port --charset=utf8 --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</code>
<code>##### set a new slowquery log ###########</code>
<code>tmp_log</code><code>=</code><code>`$mysql_client </code><code>-</code><code>h$mysql_host </code><code>-</code><code>P$mysql_port </code><code>-</code><code>u$mysql_user </code><code>-</code><code>p$mysql_password </code><code>-</code><code>e </code><code>"select concat('$slowquery_dir','slowquery_',date_format(now(),'%Y%m%d%H'),'.log');"</code><code>|grep log|sed </code><code>-</code><code>n </code><code>-</code><code>e </code><code>'2p'</code><code>`</code>
<code>#config mysqlslowquery</code>
<code>$mysql_client </code><code>-</code><code>h$mysql_host </code><code>-</code><code>P$mysql_port </code><code>-</code><code>u$mysql_user </code><code>-</code><code>p$mysql_password </code><code>-</code><code>e </code><code>"set global slow_query_log=1;set global long_query_time=$slowquery_long_time;"</code>
<code>$mysql_client </code><code>-</code><code>h$mysql_host </code><code>-</code><code>P$mysql_port </code><code>-</code><code>u$mysql_user </code><code>-</code><code>p$mysql_password </code><code>-</code><code>e </code><code>"set global slow_query_log_file = '$tmp_log'; "</code>
<code>echo </code><code>"$tmp_log"</code> <code>>$slowquery_dir</code><code>/</code><code>version.txt</code>
<code>#delete log before 7days</code>
<code>cd $slowquery_dir</code>
<code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>find .</code><code>/</code> <code>-</code><code>name </code><code>'slowquery_*.log'</code> <code>-</code><code>mtime </code><code>+</code><code>14</code><code>|xargs rm </code><code>-</code><code>rf ;</code>
<code>###同步慢查询日志到从服务上</code>
<code>src</code><code>=</code><code>/</code><code>home</code><code>/</code><code>log</code><code>/</code><code>mysql</code><code>/</code>
<code>dest</code><code>=</code><code>mysql</code>
<code>ip</code><code>=</code><code>172.1</code><code>.</code><code>1.222</code>
<code>#/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y%H:%M' --format '%T %w %f' -e modify,delete,create,attrib $src | while read DATE TIME DIR FILE;</code>
<code>#do</code>
<code>#filechange=${DIR}${FILE}</code>
<code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>rsync </code><code>-</code><code>avz </code><code>-</code><code>-</code><code>delete </code><code>-</code><code>-</code><code>progress $src </code><code>221mysqlbak</code><code>@$ip::$dest </code><code>-</code><code>-</code><code>password</code><code>-</code><code>file</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>rsyncd.password ></code><code>/</code><code>home</code><code>/</code><code>rsync.log </code><code>2</code><code>>&</code><code>1</code>
<code>#echo "At ${TIME} on ${DATE}, file $filechange was backed up via rsynce" >/home/rsync.log 2>&1</code>
<code>#done</code>
<code>####END####</code>
定时任务
00 */1 * * * root /bin/bash /usr/local/sbin/lepus_slowquery.sh 1>/dev/null 2>&1 &
从
<code>mysql_host</code><code>=</code><code>"172.1.1.222"</code>
<code>#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}'`</code>
<code>lepus_server_id</code><code>=</code><code>276</code>
<code> </code>
<code>slowquery_file</code><code>=</code><code>`cat ${slowquery_dir}version.txt`</code>
<code>$pt_query_digest </code><code>-</code><code>-</code><code>user</code><code>=</code><code>$lepus_db_user </code><code>-</code><code>-</code><code>password</code><code>=</code><code>$lepus_db_password </code><code>-</code><code>-</code><code>port</code><code>=</code><code>$lepus_db_port </code><code>-</code><code>-</code><code>charset</code><code>=</code><code>utf8 </code><code>-</code><code>-</code><code>review h</code><code>=</code><code>$lepus_db_host,D</code><code>=</code><code>$lepus_db_database,t</code><code>=</code><code>mysql_slow_query_review </code><code>-</code><code>-</code><code>history h</code><code>=</code><code>$lepus_db_host,D</code><code>=</code><code>$lepus_db_database,t</code><code>=</code><code>mysql_slow_query_review_history </code><code>-</code><code>-</code><code>no</code><code>-</code><code>report </code><code>-</code><code>-</code><code>limit</code><code>=</code><code>100</code><code>%</code> <code>-</code><code>-</code><code>filter</code><code>=</code><code>"\$event->{add_column} = length(\$event->{arg}) and\$event->{serverid}=$lepus_server_id "</code> <code>$slowquery_file ></code><code>/</code><code>home</code><code>/</code><code>lepus_slowquery.log</code>
<code>#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'`</code>
<code>#$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;"</code>
<code>#$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "set global slow_query_log_file = '$tmp_log'; "</code>
<code>#cd $slowquery_dir</code>
<code>#/usr/bin/find ./ -name 'slowquery_*' -mtime +7|xargs rm -rf ;</code>
*/30 * * * * root /bin/bash /usr/local/sbin/lepus_slowquery.sh 1>/dev/null 2>&1 &
web界面点击172.1.1.222慢查询分析就代表是主的慢查询
-------------------------------------------分割线----------------------------------------------------
首先,说明几点
1.lepus3.7和lepus3.8 安装基本相同
参考http://suifu.blog.51cto.com/9167728/1770121
一定要用apache,php最好高版本,yum最好
或者
参考http://suifu.blog.51cto.com/9167728/1770493
有一键部署的lamp环境,如果是新机器,建议采用,参时间
开始安装部署
因为要监控mysql5.7,所以下载lepus3.8版本
a 监控机
1.1如果监控机的mysql也是5.7的话,那么这里有个问题,就是sql_mode,5.7默认开启了
select version(), @@sql_mode;
关闭的话,vim /etc/my.cnf
sql_mode='IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
这步只要在监控机上做。
主要解决php中慢查询执行sql报错,就是sql_mode引起的
1.2
lamp环境,yum略过,最好自己内部有yum服务器,那样安装起来也很快
1.3
详细步骤请参考最上面的文章
mysql> create database lepus default character set utf8;
mysql> grant select,insert,update,delete,create on lepus.* to 'lepus_user'@'%' identified by'MANAGER';
grant select,insert,update,delete,create on lepus.* to 'lepus_user'@'%' identified by 'xx';
mysql> flush privileges;
[root@HE3Lepus_v3.8_beta]# mysql -uroot -p lepus < sql/lepus_table.sql
[root@HE3Lepus_v3.8_beta]# mysql -uroot -p lepus < sql/lepus_data.sql
mysql>use lepus
mysql>alter table mysql_status modify column max_connect_errors bigint(18);
mysql>alter table mysql_status_history modify column max_connect_errors bigi
安装Lpeus程序
进入到Lepus软件包的python文件夹
# cd python/
授予install.sh可执行权限
# chmod +x install.sh
执行安装
# ./install.sh
修改配置文件
进入到安装目录,默认为/usr/local/lepus
[root@HE3~]# vi /usr/local/lepus/etc/config.ini
###监控机MySQL数据库连接地址###
[monitor_server]
host="192.168.1.250"
port=4008
user="lepus_user"
passwd="MANAGER"
dbname="lepus"
重启lepus进程
/usr/local/lepus/lepus stop
/usr/local/lepus/lepus start
[root@HE3lepus]# tail -f logs/lepus.log
安装WEB管理台
进入到你的lepus软件目录
[root@HE3 ~]# cd /home/Lepus_v3.8_beta/
[root@HE3Lepus_v3.8_beta]# cp -r php /home/www
[root@HE3 ~]# vi /home/lepus/php/application/config/database.php
$db['default']['hostname'] = '192.168.1.250'; #这是a机器
$db['default']['port'] = '4008';
$db['default']['username'] = 'lepus_user';
$db['default']['password'] = 'MANAGER';
$db['default']['database'] = 'lepus';
$db['default']['dbdriver'] = 'mysql';
b 被监控机
2.
mysql> grant select,super,process,reload,show databases,replication client on *.* to'lepus_monitor'@'%' identified by 'MANAGER';
3.登录进行添加主机和监控
通过浏览器输入mysqlmtop1.ikongjian.com打开监控界面,即可登录系统。.默认管理员账号密码admin/Lepusadmin登录后请修改管理员密码,增加普通账号。
4.表空间的监控,添加代码
job = Process(target = job_run, args = ('check_mysql_bigtable',int(frequency_monitor)*120))
joblist.append(job)
job.start()
5.慢查询
[root@ot21 bin]# service crond restart
停止 crond: [确定]
正在启动 crond: [确定]
[root@ot21 bin]# cat /usr/local/sbin/lepus_slowquery.sh
#!/bin/bash
#****************************************************************#
# ScriptName:/usr/local/sbin/lepus_slowquery.sh
# Create Date:2014-03-25 10:01
# Modify Date:2014-03-25 10:01
#***************************************************************#
#configlepus database server监控机
lepus_db_host="a"
lepus_db_port=3306
lepus_db_user="lepus_user"
lepus_db_password="xx"
lepus_db_database="lepus"
#configmysql server被监控机
mysql_client="xx"
mysql_host="b"
mysql_port=3306
mysql_user="lepus_monitor"
mysql_password="xx"
#configslowqury慢日志位置
slowquery_dir="/log/mysql/"
slowquery_long_time=0.5
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"
#config server_id被监控机id从lepus图形界面看
lepus_server_id=275
#collect mysqlslowquery log into lepus database
$pt_query_digest --user=$lepus_db_user --password=$lepus_db_password --port=$lepus_db_port --charset=utf8 --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 slowquery 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 mysqlslowquery
$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 7days
cd $slowquery_dir
/usr/bin/find ./ -name 'slowquery_*' -mtime +7|xargs rm -rf ;
####END####
*/5 * * * * root /bin/bash /usr/local/sbin/lepus_slowquery.sh 1>/dev/null 2>&1 &
慢查询图片
8
7.162
6.189
9.012
0.0685
0.00014
0.03841
6.生成awr报告
7.定时邮件发送
完成。
注意问题
1.pt-query-digest 2.2.19
2.chown -R mysql.mysql /log/mysql
3.grant select,super,process,reload,show databases,replication client on *.* to'lepus_monitor'@'%' identified by 'xx';
4.lepus_server_id=275
5.sql_mode
附上查询语句
select t2.* from
(select a.checksum,a.fingerprint,a.sample,a.first_seen,a.last_seen,b.serverid_max,
b.db_max,b.user_max,b.ts_min,b.ts_max,
sum(b.ts_cnt) as ts_cnt,
sum(b.Query_time_sum)/sum(b.ts_cnt) as Query_time_avg,
max(b.Query_time_max) as Query_time_max,
min(b.Query_time_min) as Query_time_min,
b.Query_time_sum as Query_time_sum,
max(b.Lock_time_max) as Lock_time_max,
min(b.Lock_time_min) as Lock_time_min,
sum(b.Lock_time_sum) as Lock_time_sum
from mysql_slow_query_review a join mysql_slow_query_review_history b
where a.checksum=b.checksum and b.serverid_max='275'
group by a.checksum ) t2 where t2.Query_time_avg>4 and t2.ts_cnt>1000
-- order by Query_time_sum desc
order by t2.ts_cnt desc
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1887605,如需转载请自行联系原作者