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
  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/52py/p/12335501.html
Copyright © 2011-2022 走看看