数据库管理员需要在夜间对数据库进行例行维护。有时,某些查询耗时长的应用程序通过锁阻止了该维护操作。当然,肯定是优先考虑应用程序,而取消例行维护作业。有时,我们需要一个快速的方法来生成一个程序来杀死某个相关的连接。这就是mysqlprocgrep 工具的用处。
实例
生成一个事件来杀死msaladin用户执行'my_admin_thingy'管理脚本的所有连接。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlprocgrep-practical-application/
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语句。有了这一点,我们可以创建一个存储过程,从事件中调用之,并定义一个维护的事件每天执行。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlprocgrep-practical-application/
权限
用户必须有对mysql数据库的SELECT权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlprocgrep-practical-application/
小技巧
如果使用正则表达式,可以指定–regexp选项来使用正则表达式,而不是数据库模式。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlprocgrep-practical-application/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlprocgrep-practical-application/

我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
评论