数据库管理员需要在夜间对数据库进行例行维护。有时,某些查询耗时长的应用程序通过锁阻止了该维护操作。当然,肯定是优先考虑应用程序,而取消例行维护作业。有时,我们需要一个快速的方法来生成一个程序来杀死某个相关的连接。这就是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选项来使用正则表达式,而不是数据库模式。
文章转载来自:trustauth.cn