首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux Shell 定時清理 MySQL Locked 進程腳本

     編輯:MySQL 資料庫相關知識

定時 Kill MySQL Locked 進程 Shell 腳本

針對架構不佳導致頻繁出現 Locked 進程的場景,編寫腳本定時清理,降低資料庫壓力。

腳本邏輯

  1. show processlist 找出 State 含 "Locked" 的進程 ID
  2. 將 ID 寫入臨時檔,並記錄日誌
  3. 產生批次 kill 指令腳本並執行
  4. 清理臨時檔

完整腳本

#!/bin/bash
mysql_pwd="xxxxxx"
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"

# 擷取 Locked 進程 ID
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" > $file_tmp
cat $file_tmp >> $file_log

# 產生 kill 腳本
for line in $(cat $file_tmp | awk '{print $1}'); do
    echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $file_sh
done

chmod +x $file_sh
sh $file_sh          # 執行 kill
> $file_sh           # 清空臨時腳本

部署方式

加入 crontab 定時執行,如每分鐘檢查:

* * * * * /path/kill_locked.sh

根本治理提醒

此為療標方案,長期應優化:

  • 慢查詢分析與索引優化
  • 拆分大事務、縮短鎖持有時間
  • 架構層面:讀寫分離、分庫分表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved