数据库管理员需要在夜间对数据库进行例行维护。有时,某些查询耗时长的应用程序通过锁阻止了该维护操作。当然,肯定是优先考虑应用程序,而取消例行维护作业。有时,我们需要一个快速的方法来生成一个程序来杀死某个相关的连接。这就是mysqlprocgrep 工具的用处。
实例
生成一个事件来杀死msaladin用户执行’my_admin_thingy’管理脚本的所有连接。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
shell> mysqlprocgrep —sql–body \
—match–command=‘my_admin_thingy%’ —match–user=‘msaladin%’ —kill–connection
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 ‘my_admin_thingy%’
AND
USER LIKE ‘msaladin%’
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;
|
上面的例子中的输出即可满足需求的SQL语句。有了这一点,我们可以创建一个存储过程,从事件中调用之,并定义一个维护的事件每天执行。
权限
用户必须有对mysql数据库的SELECT权限。
小技巧
如果使用正则表达式,可以指定–regexp选项来使用正则表达式,而不是数据库模式。
文章转载来自:ttlsa.com