mysql kill程式指令碼

pathfinder_cui發表於2015-07-16

Mysql遇到Too many connections的解決辦法

由於線上mysql例項太多,因此也就經常遇到Too many connections的問題,這個問題也是最常見的問題,下面就結合自己的經驗來說一下這種問題的解決辦法。

在出現這種問題的時候業務已經出現問題了,這種情況下最主要的是先恢復業務,而且自己要最先獲取show innodb statusshow full processlist的資訊以便一會分析原因。最簡單的辦法就是臨時將連線數稍微調大,讓自己能登陸上去,一般這種情況下登陸的時候也會出現Too many connections的提示,那麼該如何做呢?這時候可以在主上面寫一個死迴圈不停的連線主mysql以保證自己能正常登入,簡單語句如下:

while true;do mysql -uroot -ppassword -S /tmp/mysql_3306.sock;done

然後使用gdb工具來更改記憶體中max_connections的配置,使用方法為:先使用ps命令查詢出mysql的程式ID,然後使用如下命令進行更改:

gdb -p 21862 -ex "set max_connections=1000" -batch

注意max_connections不要設定太大,如果設定太大可能會導致系統記憶體耗盡。

登陸之後就可以透過show full processlist看看到底發生了什麼事情,一般的是有SQL堵住的了,kill掉對應的SQL即可。對於短時間上來大量請求的需要和開發一起分析定位問題。

#!/bin/sh
name="root"
passd="wycfmysql4nopd"
path='/mysql4/bin/mysql'
ip="127.0.0.1"
port="3309"
for sid in $($path -u$name -p$passd -h$ip -P$port -e "show processlist;"|grep "Sleep"|awk '{print $1}')
do
#echo "$sid"
${path}admin -u$name -p$passd -h$ip -P$port kill ${sid};
done

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29620572/viewspace-1735087/,如需轉載,請註明出處,否則將追究法律責任。

相關文章