方式一:使用SELECT INTO+SOURCE方式
使用SELECT INTO OUTFILE方式獲取到要刪除的連接ID並保存為文件,在通過SOURCE執行
## 查看kill_id文件是否存在 system cat /tmp/kill_id.sql ## 如果文件存在,則先刪除 system sudo rm -rf /tmp/kill_id.sql ## 將所有sleep的回話拼成KILL 腳本導入到文件 SELECT CONCAT('kill ',ID,';') FROM `information_schema`.`PROCESSLIST` t WHERE t.`COMMAND` IN ('Sleep') AND t.`TIME`>2
AND t.`USER` IN ('XXX') INTO OUTFILE '/tmp/kill_id.sql'; ## 使用source來執行文件 source /tmp/kill_id.sql ## 如果文件存在,則先刪除 system sudo rm -rf /tmp/kill_id.sql ## 查看當前進程 SHOW FULL PROCESSLIST;
MySQL參數secure_file_priv會限制LOAD DATA\SELECT …OUTFILE\LOAD_FILE()等命令使用文件的目錄
1、如果secure_file_priv為NULL,則不允許導出和導入
2、如果secure_file_priv為特定目錄,則只能操作該目錄下的問題件
3、如果secure_file_priv為空時,則運行對所有目錄進行導入導出。
全局參數secure_file_priv時只讀參數,無法使用SET GLOBAL進行修改,只能在配置文件中設置並重啟生效。
方式二:使用GROUP_CONCAT
使用GROUP_CONCAT獲取KILL腳本,在復制腳本執行
SET SESSION group_concat_max_len=102400; SELECT GROUP_CONCAT(CONCAT('kill ',id,';') separator '') FROM `information_schema`.`PROCESSLIST` t WHERE t.`Time`>1 AND t.`User` IN('devpadmin') AND t.`COMMAND` IN ('Sleep') \G