#!/bin/bash
#获取mysql的进程id
pid=`ps -ef | grep mysql | grep -v 'grep' | awk '{print $2}'`
#创建数组接收查询到的id
pidARR=($pid)
#创建数组将下面查询的线程id存放在一起
pidAdd=()
#循环mysql的进程id
for(( i=0;i<${#pidARR[@]};i++)) do
#${#array[@]}获取数组长度用于循环
#echo ${pidARR[i]};
mysqlPid=`top -n 1 -p ${pidARR[i]} -H |grep 'PID' -A 5 | awk '{print $2}'|grep -v "PI
D" `
#将线程id存放在一起
pidAdd+=($mysqlPid)
done;
#输出查询到的id
#echo "ArryAdd:"
#for(( i=0;i<${#pidAdd[@]};i++)) do
#echo ${pidAdd[i]};
#done;
#将数组转换为字符串
for a in "${pidAdd[@]}"; do
S="${S:+${S},}${a}"
done;
echo “PID:”$S
#获取登录密码,默认是root用户
echo -n "Enter your password: "
read password
echo "SlowSQL:"
#连接数据库做查询
mysql -uroot -p$password 2>/dev/null<<EOF
select sql_text from performance_schema.events_statements_current where thread_id in
(select
thread_id from performance_schema.threads where thread_os_id in($S) )\G
EOF
目前还有瑕疵,获取进程时是写死的,应该做判断。
执行脚本后,会展示出当前占用CPU前五的SQL语句。