dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接
數(shù)據(jù)庫(kù)或服務(wù)器的維護(hù)通常在晚上由數(shù)據(jù)庫(kù)管理員執(zhí)行。但是,這些例程有時(shí)會(huì)被長(zhǎng)時(shí)間運(yùn)行的查詢或掛起鎖的應(yīng)用程序阻塞,掛起鎖的時(shí)間比預(yù)期更長(zhǎng)。
通常,應(yīng)優(yōu)先考慮應(yīng)用程序,并且通常會(huì)取消維護(hù)例程,以免干擾應(yīng)用程序。但是有時(shí)候,您的例程仍然被阻塞,或者由于某種原因在某個(gè)時(shí)間之前尚未完成,在這種情況下,您需要一種快速的方法來(lái)終止所涉及的連接。
在本文中,我們旨在考慮兩種解決上述問(wèn)題的方法。為此,我們將使用dbForge Studio for MySQL。
方法一:根據(jù)用戶登錄生成一個(gè)事件,該事件將終止所有連接
第一種方法包括創(chuàng)建一個(gè)特殊的MySQL事件。創(chuàng)建事件時(shí),將創(chuàng)建一個(gè)包含一個(gè)或多個(gè)SQL語(yǔ)句的命名數(shù)據(jù)庫(kù)對(duì)象,該SQL語(yǔ)句將在一個(gè)特定的日期和時(shí)間開始和結(jié)束,并以一個(gè)或多個(gè)規(guī)則的時(shí)間間隔執(zhí)行。
使用以下腳本在數(shù)據(jù)庫(kù)上創(chuàng)建事件:
DELIMITER $$ CREATE EVENT kill_process_event ON SCHEDULE EVERY '1' DAY STARTS '2019-03-20 08:45:30' DO BEGIN DECLARE kill_done int; DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1; BEGIN DECLARE cursor_ID int; DECLARE cursor_i CURSOR FOR SELECT id FROM information_schema.PROCESSLIST WHERE USER LIKE 'test%' AND ID != CONNECTION_ID(); OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID; KILL CONNECTION cursor_ID; IF kill_done THEN LEAVE read_loop; END IF; END LOOP; CLOSE cursor_i; END; END $$ ALTER EVENT kill_process_event_ev ENABLE $$ DELIMITER ;
下一步
-
將您自己的值分配給所需的參數(shù)。即日程、時(shí)間和用戶登錄。
-
安排事件
-
設(shè)置服務(wù)器變量event_scheduler = ON
如何安排事件
要安排事件,請(qǐng)?jiān)趯?duì)象資源管理器中右鍵單擊它,然后從彈出窗口中選擇“編輯事件”。在打開的向?qū)е?,您可以為事件配置開始和結(jié)束日期、重復(fù)發(fā)生以及其他相關(guān)選項(xiàng)。
在我們的示例中,我們想終止sakila數(shù)據(jù)庫(kù)上test%用戶的連接。
執(zhí)行上述腳本后,所有具有用戶登錄名('test%')的連接都將被終止。
該方法的缺點(diǎn)在于,當(dāng)改變用于選擇會(huì)話ID的條件時(shí),必須改變對(duì)象(事件)。
或者,您可以創(chuàng)建一個(gè)存儲(chǔ)過(guò)程和一個(gè)事件來(lái)調(diào)用此過(guò)程。
創(chuàng)建一個(gè)調(diào)用存儲(chǔ)過(guò)程的事件,該事件將根據(jù)用戶登錄終止連接
基本上,此方法是前一種方法的擴(kuò)展。它涉及創(chuàng)建MySQL過(guò)程,然后安排事件以調(diào)用此過(guò)程。
首先,您需要在數(shù)據(jù)庫(kù)上創(chuàng)建一個(gè)存儲(chǔ)過(guò)程:
DELIMITER $$ CREATE PROCEDURE kill_process_proc() BEGIN DECLARE kill_done int; DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1; BEGIN DECLARE cursor_ID int; DECLARE cursor_i CURSOR FOR SELECT id FROM information_schema.PROCESSLIST WHERE USER LIKE 'test%' AND ID != CONNECTION_ID(); OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID; KILL CONNECTION cursor_ID; IF kill_done THEN LEAVE read_loop; END IF; END LOOP; CLOSE cursor_i; END; END$$ DELIMITER ;
您需要將所需的值分配給USER參數(shù)。在我們的示例中,它是“test%”。
接下來(lái),準(zhǔn)備好過(guò)程,您可以創(chuàng)建一個(gè)事件來(lái)調(diào)用它并按計(jì)劃執(zhí)行它。請(qǐng)考慮以下腳本:
CREATE DEFINER = 'root'@'localhost' EVENT a_kor.kill_process_event ON SCHEDULE EVERY '1' DAY STARTS '2019-03-19 14:53:00' DO BEGIN CALL kill_process_proc(); END; ALTER EVENT a_kor.kill_process_event ENABLE;
下一步
-
將您自己的值分配給所需的參數(shù)。即日程、時(shí)間和用戶登錄。
-
安排事件
-
設(shè)置服務(wù)器變量event_scheduler = ON
執(zhí)行上述步驟后,所有具有用戶登錄名('test%')的連接都將被終止。
方法二:創(chuàng)建一個(gè)bat文件以啟動(dòng)MySQL客戶端和一個(gè)帶有參數(shù)的過(guò)程
您還可以通過(guò)命令行界面創(chuàng)建可執(zhí)行的BAT文件來(lái)啟動(dòng)MySQL客戶端和帶有參數(shù)的過(guò)程。
首先,您需要?jiǎng)?chuàng)建一個(gè)帶有參數(shù)的過(guò)程。為此,請(qǐng)使用以下腳本:
DELIMITER $$ CREATE PROCEDURE kill_process_proc() BEGIN DECLARE kill_done int; DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1; BEGIN DECLARE cursor_ID int; DECLARE cursor_i CURSOR FOR SELECT id FROM information_schema.PROCESSLIST WHERE USER LIKE 'test%' AND ID != CONNECTION_ID(); OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID; KILL CONNECTION cursor_ID; IF kill_done THEN LEAVE read_loop; END IF; END LOOP; CLOSE cursor_i; END; END$$ DELIMITER ;
相應(yīng)的過(guò)程將出現(xiàn)在數(shù)據(jù)庫(kù)中。讓我們借助dbForge Studio for MySQL對(duì)其進(jìn)行研究。
接下來(lái),您需要?jiǎng)?chuàng)建一個(gè)BAT文件。
要?jiǎng)?chuàng)建BAT文件,請(qǐng)執(zhí)行以下操作:
1、打開純文本編輯器,例如記事本。
2、輸入以下代碼:
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" --user=--password=--host=--port=--database=--execute="CALL kill_process_param('%1')"
3、為用戶、密碼、主機(jī)、端口和數(shù)據(jù)庫(kù)名稱參數(shù)分配自己的值。
4、保存擴(kuò)展名為.bat的文件。
現(xiàn)在,您需要在Windows任務(wù)調(diào)度程序的幫助下安排bat文件的執(zhí)行。
結(jié)果,所有具有用戶登錄名('test%')的連接都將被終止。
結(jié)論
知道如何在MySQL Server中終止進(jìn)程可能是工具箱中的便捷工具。但是,我們建議您謹(jǐn)慎使用給定的方法。您可以下載dbForge Studio for MySQL試用版體驗(yàn)一下~
想要購(gòu)買該產(chǎn)品請(qǐng)點(diǎn)擊“在線訂購(gòu)”,想要了解更多產(chǎn)品信息請(qǐng)點(diǎn)擊“咨詢?cè)诰€客服”