架構設計不合理導致 MySQL 壓力大,頻繁出現「Locked」狀態進程,需定時清理以恢復吞吐。
#!/bin/bash
mysql_pwd="xxxxxx" # MySQL root 密碼
mysql_exec="/usr/local/mysql/bin/mysql"
tmp_dir="/tmp"
file_sh="$tmp_dir/mysql_kill_locked.sh"
file_tmp="$tmp_dir/mysql_kill_locked.tmp"
file_log="$tmp_dir/mysql_kill_locked.log" # 日誌
# 1. 抓取所有 Locked 進程 ID
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" > $file_tmp
# 2. 記錄日誌
cat $file_tmp >> $file_log
# 3. 生成殺進程腳本
for line in `cat $file_tmp | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $file_sh
done
# 4. 執行並清理
chmod +x $file_sh
sh $file_sh
> $file_sh
*/5 * * * * /path/to/script.sh(每 5 分鐘檢查一次)flock)防止並發執行腳本含明文密碼,請限制檔案權限 chmod 600,或改用 --defaults-extra-file 指定加密配置檔。