【转】Mysql进程管理

mysql> show processlist;

+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
|  7 | root | localhost | yy   | Sleep   |  154 |       | NULL             | 
|  8 | root | localhost | NULL | Query   |    0 | NULL  | show processlist | 
+----+------+-----------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

mysql> kill 7
    -> ;

mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
|  8 | root | localhost | NULL | Query   |    0 | NULL  | show processlist | 
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

-----

每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程。

KILL允许自选的CONNECTION或QUERY修改符:

·         KILL CONNECTION与不含修改符的KILL一样:它会终止与给定的thread_id有关的连接。

·         KILL QUERY会终止连接当前正在执行的语句,但是会保持连接的原状。

如果您拥有PROCESS权限,则您可以查看所有线程。如果您拥有SUPER权限,您可以终止所有线程和语句。否则,您只能查看和终止您自己的线程和语句。

您也可以使用mysqladmin processlistmysqladmin kill命令来检查和终止线程。

注释:您不能同时使用KILL和Embedded MySQL Server库,因为内植的服务器只运行主机应用程序的线程。它不能创建任何自身的连接线程。

当您进行一个KILL时,对线程设置一个特有的终止标记。在多数情况下,线程终止可能要花一些时间,这是因为终止标记只会在在特定的间隔被检查:

·         在SELECT, ORDER BY和GROUP BY循环中,在读取一组行后检查标记。如果设置了终止标记,则该语句被放弃。

·         在ALTER TABLE过程中,在每组行从原来的表中被读取前,检查终止标记。如果设置了终止标记,则语句被放弃,临时表被删除。

·         在UPDATE或DELETE运行期间,在每个组读取之后以及每个已更行或已删除的行之后,检查终止标记。如果终止标记被设置,则该语句被放弃。注意,如果您正在使用事务,则变更不会被 回滚。

·         GET_LOCK()会放弃和返回NULL。

·         INSERT DELAYED线程会快速地刷新(插入)它在存储器中的所有的行,然后终止。

·         如果线程在表锁定管理程序中(状态:锁定),则表锁定被快速地放弃。

·         如果在写入调用中,线程正在等待空闲的磁盘空间,则写入被放弃,并伴随"disk full"错误消息。

·         警告:对MyISAM表终止一个REPAIR TABLE或OPTIMIZE TABLE操作会导致出现一个被损坏的没有用的表。对这样的表的任何读取或写入都会失败,直到您再次优化或修复它(不中断)。

转自 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-index

mysql 有选择地kill process

show processlist / show full processlist 可以看到当前的process信息,
如果想要kill某些process,只能复制它的Id(thread id),然后kill, 每次只能kill一个。
如果要kill掉所有运行时间超过10秒的语句,这样搞起来就太麻烦了。
今天介绍个简单的办法,主要是通过INFORMATION_SCHEMA数据库来实现。
其中的PROCESSLIST表记录了process的信息。

找出运行时间超过10秒的process的ID。
SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE COMMAND = ‘Query‘ AND TIME > 10;
这样似乎太莽撞了,有些进程不应该被kill的,比如负责replication的。。。
需要过滤一下:

SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE COMMAND = ‘Query‘ AND TIME > 10 
AND ID != CONNECTION_ID() 
AND USER != ‘root‘ 
AND COMMAND != ‘Binlog Dump‘ 
AND STATE NOT REGEXP ‘(slave|relay|event)‘
你也可以根据实际情况加入自己的过滤条件。

然后比较悲剧的是 kill 只能接受一个id做为参数。
只好生成所有的kill语句了:

mysql> SELECT CONCAT(‘KILL ‘,ID,‘;‘)
FROM   INFORMATION_SCHEMA.PROCESSLIST
WHERE  USER = ‘webs‘
       AND COMMAND = ‘Query‘
       AND TIME > 10
  INTO   OUTFILE ‘/tmp/kill_list.txt‘;
然后再导入:

注意下面这行语句不是以分号结尾的
mysql> \. /tmp/kill_list.txt
Query OK, 0 ROWS affected (0.00 sec)
虽然现在智能多了,但是这样搞一回也还是比较麻烦的。
可以试试看 Percona Toolkit里面的 pt-kill, 祝你们好运

转自http://blog.csdn.net/hewy0526/article/details/8240710

时间: 2024-10-07 16:15:59

【转】Mysql进程管理的相关文章

Linux命令:MySQL系列之十一--MySQL日志管理

MySQL日志管理 SHOW GLOBAL VARIABLES LIKE '%log%':查看关于log的全局变量 一.日志分类 1.错误日志   2.一般查询日志   3.慢查询日志 4.二进制日志  5.中继日志   6.事务日志   7.滚动日志 二.日志详解 1.错误日志 说明:在对应的数据目录中,以主机名+.err命名的文件,错误日志记录的信息类型: 记录了服务器运行中产生的错误信息 记录了服务在启动和停止是所产生的信息 在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录

linux进程管理(四)

[教程主题]:进程管理 [1]进程介绍 程序和进程 程序是为了完成某种任务而设计的软件,比如OpenOffice是程序.什么是进程呢?进程就是运行中的程序. 一个运行着的程序,可能有多个进程. 比如自学it网所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,apache服务器将会创建有多个httpd进程来对其进行服务. 进程分类: 进程一般分为交互进程.批处理进程和守护进程三类. 值得一提的是守护进程总是活跃的,一般是后台

PHP FastCGI进程管理器PHP-FPM的架构

PHP FastCGI进程管理器PHP-FPM的架构 一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能. 每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程. 每个worker进程能保持一个到MySQL/Me

linux进程管理相关概念

我们知道,不管是在繁忙的服务器还是比较空闲的pc机上,系统都不只是运行一个进程,在linux上,当用户输入命令,在程序被载入内存执行之后我们称之为进程. 计算机的核心组件,cpu和内存,cpu由运算器和控制器组成,cpu只能从内存读入数据进行计算,那么在linux系统上,当用户输入一个命令,这条命令所对应的程序代码就会被装载进内存,然后由cpu执行,正是因为同时有多个进程需要执行而cpu只有一颗的情况下,在众多进程之间完成切换就显得比较重要. 我们知道,cpu提供的计算能力是按照时间的流逝来计算

mysql用户管理及授权管理

mysql用户和权限管理 mysqld进程在启动的时候,将table,host,db,table_privs,clumn_privs,procs_privs,proxies_privs载入内存. 用户账号: 用户名+主机 用户名:16字符以内. 主机: 主机名: mytest IP地址:172.168.1.20 网络地址:172.168.1.0/255.255.0.0 通配符: 172.168.%.% 172.168.1.2__ %.qq.com,注如果是域名,则mysql需要进行解析,如果取消

Linux基础: 网络命令和进程管理

? netstat lsof ps pstree pkill/kill (了解jenkins git,排查环境) 查询服务器之间是否有链接(netstat -an) 某个服务是否启动(了解服务对应的启动文件,ps grep)(了解服务对应的端口 netstat -tunl | grep 8080 查看服务启动的监听端口(netstat -tuln) 查看oasis对应的zookeeper,netstat -an|grep zookepper端口/oasis端口 看看各个日志 ----------

Linux 进程管理命令ps、top、kill、nice、fg、bg、vmstat、uptime

Linux 进程管理命令: ps process status 查看进行相关信息: system 风格:sysv  有-线引导 BSD风格:BSD ps a:显示所有跟终端有关的进程 u:显示更详细的字段 x:显示所有跟终端无关的进程 常用 ps ax 进程分类: 终端启动(相关)的进程:用户通过命令行启动的进程 跟终端无关的进程:系统启动就自己启动 进程状态: D: 表示不可中断的睡眠 R:表示就绪态 S:表示可中断的睡眠 T:停止 Z:僵死态 <:高优先级进程 N:低优先级进程 +:前台进程

linux进程管理(一)

进程介绍 程序和进程 程序是为了完成某种任务而设计的软件,比如OpenOffice是程序.什么是进程呢?进程就是运行中的程序. 一个运行着的程序,可能有多个进程. 比如自学it网所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,apache服务器将会创建有多个httpd进程来对其进行服务. 进程分类 进程一般分为交互进程.批处理进程和守护进程三类. 值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机

进程管理,及性能监控 ps, pstree, pidof, top, htop, pmap, vmstat, dstat

进程的分类:    CPU-Bound: CPU密集型    I/O-Bound: I/O密集型 进程的分类:    批处理进程    交互式进程    实时进程 进程调度器:    进程优先级:0-139        实时优先级:1-99,数字越大,优先级越高        静态优先级:100-139, nice值调整,数字越大,优先级越低            nice:     -20, 19            priority: 100, 139        动态优先级:由内核维