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
  • 相关阅读:
    vue实战(3):底部导航显示、搭建各模块静态页面、添加登录页页面与路由
    vue实战(2):初始化项目、搭建底部导航路由
    hexo
    移动端自适应
    vue过场动画
    获取 TypeScript
    TypeScript 与 JavaScript 的区别
    api封装使用
    vue学习
    dom的增删改
  • 原文地址:https://www.cnblogs.com/52py/p/12335501.html
Copyright © 2011-2022 走看看