zoukankan      html  css  js  c++  java
  • 批量清理mysql进程

    批量kill掉无用的sql语句,避免影响拖垮数据库。

    MariaDB [(none)]> show processlist;
    +--------+------+-----------------+----------+---------+------+-------+------------------+----------+
    | Id     | User | Host            | db       | Command | Time | State | Info             | Progress |
    +--------+------+-----------------+----------+---------+------+-------+------------------+----------+
    | 103258 | root | localhost:57884 | adminset | Sleep   |    2 |       | NULL             |    0.000 |
    | 103259 | root | localhost       | NULL     | Query   |    0 | NULL  | show processlist |    0.000 |
    +--------+------+-----------------+----------+---------+------+-------+------------------+----------+
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> show full processlist;
    +--------+------+-----------------+----------+---------+------+-------+-----------------------+----------+
    | Id     | User | Host            | db       | Command | Time | State | Info                  | Progress |
    +--------+------+-----------------+----------+---------+------+-------+-----------------------+----------+
    | 103258 | root | localhost:57884 | adminset | Sleep   |    3 |       | NULL                  |    0.000 |
    | 103259 | root | localhost       | NULL     | Query   |    0 | NULL  | show full processlist |    0.000 |
    +--------+------+-----------------+----------+---------+------+-------+-----------------------+----------+
    2 rows in set (0.00 sec)

    找到你符合你条件的线程id就可以kill了

    mysql -uroot -S /var/lib/mysql/mysql.sock -sNe "select id from information_schema.processlist where COMMAND='Sleep' and TIME>60" | xargs -n 1 mysqladmin -uroot -S /var/lib/mysql/mysql.sock kill

    或者生成kill 命令,再自己手动执行:

    select concat('KILL ',id,';') from information_schema.processlist where COMMAND='Sleep' and TIME>60;

    或者用工具mt-kill pt-kill

    pt-kill --host=192.168.0.1 --user=root --password=mypwd --port=3306 --busy-time 60 --match-command="query|Execute" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

    pt-kill --host=192.168.0.1 --user=root --password=mypwd --port=3306 --busy-time 60 --match-state="Locked|Sending data" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

    pt-kill --host=192.168.0.1 --user=root --password=mypwd --port=3306 --busy-time 60 --match-info="SELECT|DELETE" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

    还可以用如下脚本

    #!/bin/bash
    #批量kill mysql进程的时候条件要尽可能的严格,最好是过滤掉包括update和insert的进程
    #kill掉test用户的mysql进程
    #for i in `mysql -uroot -pmypwd -se "show processlist" | grep -v "show processlist" | awk '{if($2=="test") print $1}'`
    #kill掉来自172.16.13.177的主机的mysql进程
    #for i in `mysql -uroot -pmypwd -se "show processlist" | grep -v "show processlist" | awk '{if($3 ~/^172.16.13.177:*/) print $1}'`
    #kill掉执行时间大于15秒的mysql进程
    #for i in `mysql -uroot -pmypwd -se "show processlist" | grep -v "show processlist" | awk '{if($6 > 15) print $1}'`
    #kill掉执行所有的不包括update和insert关键词的mysql进程
    #for i in `mysql -uroot -pmypwd -se "show full processlist" | grep -v "show full processlist"|grep -vi -E "update|insert"|awk '{print $1}'`
    do
    #mysql -uroot -pmypwd -e "kill $i"
    echo $i
    done
  • 相关阅读:
    极速南瓜(北京)品牌管理顾问有限公司
    许涛芳_百度百科
    个性化品牌开始繁荣?为设计师和代工厂牵线的平台Maker's Row获得100万美元融资 | 36氪
    薛蟠_百度百科
    莫龙丹_百度百科
    尊履·尚品|手工鞋|固特异|定制鞋
    联系我们_你我想法_【有男度】UNANDU 100%进口 全球设计师品牌精汇 男装_男装搭配_时尚男装_品牌男装_男装搭配技巧_男装网站
    全球高级定制鞋完全指南
    百年定制老字号落户扬城 服装“私人定制”悄然兴起
    享受私人定制服装(下)
  • 原文地址:https://www.cnblogs.com/52py/p/12335501.html
Copyright © 2011-2022 走看看