在數據量大或者查詢特別頻繁的時候,偶爾會出現查詢鎖表的情況,通過show processlist;可以看到存在有Locked狀態,
現寫了個shell腳本自動殺死鎖表進程,
代碼如下:
1 #!/bin/bash 2 3 mysql_cmd=mysql 4 host=192.168.1.1 5 user=root 6 password=root 7 port=3306 8 kill_process=$($mysql_cmd -h $host -u $user -p$password -P $port -e 'show processlist' | grep -i "Locked" | awk '{if(NR>1'"${check}"') print $1}'); 9 10 for process_id in $kill_process 11 do 12 #echo $process_id 13 $mysql_cmd -h $host -u $user -p$password -P $port -e 'kill '"${process_id}" 14 done
另外種更簡單的方式
1 (1)將所有的MySQL連接進程殺掉 2 for i in ` mysql -uroot -pzhangyun -Bse "show processlist" | grep -v "show processlist" | awk '{print $1}'` 3 do 4 mysql -uroot -pzhangyun -e "kill $i" 5 done 6 7 注:這里將自身命令的show processlist進程過濾掉 8 9 (2)刪除指定用戶的連接進程 10 for i in `mysql -uroot -pzhangyun -se "show processlist" | grep -v "show processlist" | awk '{if($2=="youname")print $1}'` 11 do 12 mysql -uroot -pzhangyun -e "kill $i" 13 done
