MySQL processlist – 一个辅助的存储过程

原帖地址:http://mysqlpreacher.com/wordpress/2009/07/mysql-processlist-showkill-processes/

 

使用方法:


    call process_list(’show’,‘username’,‘hostname’);
    – shows all processes owned by username@hostname

 

    call process_list(‘kill’,‘username’,‘hostname’);
    – kills all processes owned by username@hostname

 

 

具体定义:

 

###########################################
##
##  Stored Procedure: process_list & kill user
##  call process_list(’show’,'%’) show processlist for all users
##  call process_list(’show’,'root’) show processlist for root user
##  call process_list(’kill’,'user1′) kill connections for user1
##
##  by Darren Cassar http://www.mysqlpreacher.com
##
###########################################
DROP PROCEDURE IF EXISTS process_list;
DELIMITER $$
CREATE PROCEDURE process_list(choice char(4), user_name_in varchar(16), host_name_in varchar(60))
  BEGIN
    DECLARE cur_conn int;

    IF choice <> 'show' AND choice <> 'kill' then
      SELECT "wrong choice";
    END IF;

    IF user_name_in = '' then
       SET user_name_in = '%';
    END IF;

    IF host_name_in = '' then
       SET host_name_in = '%';
    END IF;

    SET cur_conn = (SELECT connection_id());

    IF choice = 'show' then
       SELECT *
         FROM `information_schema`.`processlist`
        WHERE ID <> cur_conn
          AND USER LIKE user_name_in
          AND (HOST LIKE CONCAT(host_name_in ,':%') OR HOST LIKE host_name_in);
    ELSEIF choice = 'kill' then
       IF user_name_in = 'root' then
          SELECT "Illegal username when killing processes";
       ELSE
          SET @CNT = (
             SELECT count(*)
               FROM `information_schema`.`processlist`
              WHERE ID <> cur_conn
                AND USER LIKE user_name_in
                AND (HOST LIKE CONCAT(host_name_in ,':%') OR HOST LIKE host_name_in));

          SET @VAR=1;
          WHILE (@VAR <= @CNT) DO
              SET @TID = (
                 SELECT id
                   FROM `information_schema`.`processlist`
                  WHERE ID <> cur_conn
                    AND USER LIKE user_name_in
                    AND (HOST LIKE CONCAT(host_name_in ,':%') OR HOST LIKE host_name_in) LIMIT 1);

              SET @k = CONCAT('kill ' , @TID);
              PREPARE killcom FROM @k;
              EXECUTE killcom;
              SET @k = NULL;
              SET @VAR = @VAR+1;
          END WHILE;
       END IF;
    END IF;
  END$$

DELIMITER;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值