62.MySQL-Utilities工具包之-mysqlprocgrep进程抓取工具

1.生成杀死用户是root 的空闲进程(存储过程),不包含CREATE PROCEDURE语句。
[root@mysql1 ~]# mysqlprocgrep --match-user=root --kill-connection --match-state=sleep --sql-body
DECLARE kill_done INT;
DECLARE kill_cursor CURSOR FOR
  SELECT Id, User, Host, Db, Command, Time, State, Info FROM INFORMATION_SCHEMA.PROCESSLIST
      WHERE USER LIKE 'root' AND STATE LIKE 'sleep';
OPEN kill_cursor;
BEGIN
   DECLARE id BIGINT;
   DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
   kill_loop: LOOP
      FETCH kill_cursor INTO id;
      KILL CONNECTION id;
   END LOOP kill_loop;
END;
CLOSE kill_cursor;

2.生成杀死用户是root 的空闲进程的存储过程,包含CREATE PROCEDURE语句。
[root@mysql1 ~]# mysqlprocgrep --match-user=root --kill-connection --match-state=sleep --print-sql -vvv
use mysql; 
drop  PROCEDURE kill_processes;

delimiter //
CREATE PROCEDURE kill_processes ()
BEGIN
   DECLARE kill_done INT;
   DECLARE kill_cursor CURSOR FOR
     SELECT Id, User, Host, Db, Command, Time, State, Info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER LIKE 'root' AND STATE LIKE 'sleep';
   OPEN kill_cursor;
   BEGIN
      DECLARE id BIGINT;
      DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
      kill_loop: LOOP
         FETCH kill_cursor INTO id;
         KILL CONNECTION id;
      END LOOP kill_loop;
   END;
   CLOSE kill_cursor;
END
//

3.10分钟内创建的所有进程。
[root@mysql1 ~]# mysqlprocgrep --server=root:rootroot@192.168.1.51:3306 --match-user=root --age=10m --kill-query
WARNING: Using a password on the command line interface can be insecure.
# The following KILL commands were executed:
+-----+-------+------------+-------+----------+-------+--------+-------+
| Id  | User  | Host       | db    | Command  | Time  | State  | Info  |
+-----+-------+------------+-------+----------+-------+--------+-------+
| 35  | root  | localhost  | test  | Sleep    | 3033  |        | None  |
+-----+-------+------------+-------+----------+-------+--------+-------+


4.杀死所有超过1 小时的空闲进程。谨慎执行。
mysqlprocgrep --server=root:rootroot@192.168.1.51:3306 --match-command=sleep --age=1h --kill-connection

delimiter //
DECLARE kill_done INT;
DECLARE kill_cursor CURSOR FOR SELECT Id, User, Host, Db, Command, Time, State, Info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND LIKE 'update%' AND USER LIKE 'root%';
OPEN kill_cursor;
BEGIN
   DECLARE id BIGINT;
   DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
   kill_loop: LOOP
      FETCH kill_cursor INTO id;
      KILL CONNECTION id;
   END LOOP kill_loop;
END;
CLOSE kill_cursor;
// 

5.总结。

mysqlprocgrep 进程抓取工具,看起来好用,但是生产的存储过程,执行各种报错,不是一个完成的不报错的语句。所以这个语句不是很实用。当然我们可以通过截取其中的SQL语句,然后手工生成相关的进程过去信息。

SELECT Id, User, Host, Db, Command, Time, State, Info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND LIKE 'update%' AND USER LIKE 'root%';

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值