#!/bin/bash
##脚本使用说明##
##脚本使用前提,环境需安装pstack工具如果没有的话
##安装方式yum install gdb -y
##/opt/mysql/data/$port/mysqld.sock sock路径根据你们实际环境做调整
##脚本中的mysql登录方式为使用socket登录,可根据你们实际情况修改替换
##文件保存路径/root可以根据自己情况修改
read -p "enter user:" user
read -p "enter passwd:" passwd
read -p "enter port:" port
a=$(mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "select version();" 2>&1 |grep -v "Using a password")
backuptime=`date +%Y%m%d-%H%M%S`
filename=$backuptime.txt
if [ ! -n "$a" ] ;then
echo "你的mysql实例hang死了" >>/root/$filename
pid=$(ps -ef | grep mysqld | grep $port | awk '{print $2}')
nohup gstack $pid >/root/gstack$filename &
sleep 3
gpid=$(ps -ef | grep gstack | grep $pid | awk '{print $2}')
kill -9 $gpid
echo "已收集完成文件为:" gstack$filename
else
echo "你的mysql实例较卡但未hang住"
echo "---------信息收集如下-----------" >>/root/$filename
echo "---------innodn-engine-status信息如下-----------" >>/root/$filename
mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "show engine innodb status\G" >>/root/$filename 2>&1 |grep -v "Using a password"
echo "---------事务信息如下-----------" >>/root/$filename
mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "select * from information_schema.innodb_trx\G;" >>/root/$filename 2>&1 |grep -v "Using a password"
echo "---------锁信息如下-----------" >>/root/$filename
mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "select * from information_schema.innodb_locks\G;" >>/root/$filename 2>&1 |grep -v "Using a password"
echo "---------实例中的锁信息如下-----------" >>/root/$filename
mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "show status like 'innodb_row_lock_%';" >>/root/$filename 2>&1 |grep -v "Using a password"
echo "---------实例中IO等待事件-----------" >>/root/$filename
mysql -u$user -p$passwd -S /opt/mysql/data/$port/mysqld.sock -e "SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT/1000000000/1000 SUM_TIMER_WAIT_S FROM performance_schema.events_waits_summary_global_by_event_name WHERE SUM_TIMER_WAIT > 0 ORDER BY SUM_TIMER_WAIT_S DESC limit 10;" >>/root/$filename 2>&1 |grep -v "Using a password"
pid=$(ps -ef | grep mysqld | grep $port | awk '{print $2}')
nohup gstack $pid >/root/gstack$filename &
sleep 3
gpid=$(ps -ef | grep gstack | grep $pid | awk '{print $2}')
kill -9 $gpid
echo "已收集完成stack文件为:" gstack$filename
echo "已收集完成文件为:" $filename
fi