mysql連線池爆滿,釋放程式長連線殭屍程式

冰雪Love齊跡發表於2017-12-26

程式啟動報錯提示連線池爆滿不可用的情況下,我們從資料庫入手檢視哪些程式長時間等待

進入mysql命令介面輸入:show processlist


下面我們查詢linux系統上mysql所在伺服器的位置which mysql,使用which命令前提是你的 cat /etc/profile你的系統環境變數檔案內配置了檢索的目錄,如果安裝目錄沒有配置在profile檔案內是查詢不到安裝目錄的,一般自行安裝會在/data/mysql目錄下,具體目錄要自行檢索


下面我們編寫清理mysql長連線的sleep狀態的程式  命名為cleanmysql.sh的shell指令碼檔案

指令碼執行的時候需要動態傳入3個引數,這些引數可以寫死也可以傳遞,sh cleanmysql.sh 引數1 引數2 引數3 【引數之間用空格隔開】

例如sh cleanmysql.sh 127.0.0.1 3306 root因為我們的shell指令碼中的hostip=$1 port=$2 user=$3是需要的伺服器地址、埠、使用者名稱

#!/bin/sh

MYSQLDIR=/data/mysql/bin
MYSQLTOOL=$MYSQLDIR/mysql
MYSQLUSER=root
MYSQLPASS=Ig#pThp%x
usage()
{
    echo "Usage: $0 ip port db_user"
    echo "Example: $0 1.1.1.1 3306 db_user"
    exit
}


if [ $# -ne 3 ];then
    usage
fi
hostip=$1
port=$2
user=$3
sleepid="SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and user='$3' and time >1000;"
echo $sleepid
 $MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "$sleepid" >sleepIDs


while read sID
do
 echo $sID
$MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "kill $sID"
done<sleepIDs

相關文章