• <menu id="w2i4a"></menu>
  • logo dbForge Studio for MySQL教程

    文檔首頁(yè)>>dbForge Studio for MySQL教程>>dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    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

    在線訂購(gòu) 試用下載

    方法一:根據(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)。

    dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    在我們的示例中,我們想終止sakila數(shù)據(jù)庫(kù)上test%用戶的連接。

    dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    執(zhí)行上述腳本后,所有具有用戶登錄名('test%')的連接都將被終止。

    dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    該方法的缺點(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)行研究。

    dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    接下來(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í)行。

    dbForge Studio for MySQL入門教程:終止與MySQL數(shù)據(jù)庫(kù)的某些連接

    結(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è)诰€客服”

    850×682.png

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();