• 批量清理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
  • 相关阅读:
    python输出shell命令执行结果
    python实验二:字符串排序
    python学习系列
    linux命令系列目录
    git初步
    HTML基础教程 七 高级
    HTML/CSS基础教程 六
    linux命令---sed
    linux命令---unzip
    模块
  • 原文地址:https://www.cnblogs.com/52py/p/12335501.html
Copyright © 2020-2023  润新知