萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Locked 進程自動清理腳本:定時殺掉超時鎖定

應用場景

架構設計不合理導致 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

部署與優化

  1. 加入 crontab:*/5 * * * * /path/to/script.sh(每 5 分鐘檢查一次)
  2. 生產環境建議加入鎖機制(flock)防止並發執行
  3. 長期方案:優化慢 SQL、調整隔離級別、拆分熱點表、升級硬體——腳本只能治標

安全提示

腳本含明文密碼,請限制檔案權限 chmod 600,或改用 --defaults-extra-file 指定加密配置檔。

copyright © 萬盛學電腦網 all rights reserved