show processlist 用来查看 MySQL 正在运行的线程,如果使用 root 账号可以看到所有用户的线程或者只能看到所使用账号自己的线程,当然如果该用户被赋予了 Process 权限也是可以查看所有用户的线程的。
mysql> show processlist;
+-----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+----------+------------------+
| 214 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 215 | root | localhost | NULL | Sleep | 3 | | NULL |
+-----+------+-----------+------+---------+------+----------+------------------+
各个字段意思:
Id: 进程id
User: 进程所属用户
Host: 发送请求的客户端
db: 当前进程正在处理哪个数据库的数据
Command: 当前正在执行的命令类型,点击查看详细信息
Time:当前线程处于当前状态的时间
State:线程的状态 点击查看详细信息
info:线程执行的语句
show processlist 默认只展示前 100 条线程,可以使用 show full processlist 展示所有线程。其实 show processlist 展示的 information_schema 库的 processlist 表中的数据,所以使用 sql 查询该表更容易对线程进行筛选过滤。
根据 show processlist 结果找到想要杀掉的线程的 Id 如上面的 215:
kill 215;
杀掉多个线程就需要使用 information_schema.processlist 表来做筛选,选出需要杀掉的线程。
比如杀掉处于"Query"状态的 10s 以上的线程
批量生成 kill 命令
> $ mysql -h 127.0.0.1 -u root -P 3306 -e "select concat('kill ', id, ';') from information_schema.processlist where command = 'Query' and time > 10" -p > /tmp/test.sql
查看 sql 文件
> $ cat /tmp/test.sql
concat('kill ', id, ';')
kill 216;
kill 214;
然后删掉第一行的列名,就可以通过 source 批量杀死所有符合条件线程。
当然如果使用的是可视化工具直接导出结果再执行更简单。
非著名程序员,全栈开发工程师,长期专注系统开发与架构设计。
功能待开通!
常见的数据库主要分为三类,SQL(关系型数据库)、NoSQL(非关系型数据库)、NewSQL。 SQL SQL即关系型数据库(RDBMS — Relational Database Management System),SQL 是基于关系型数据模型设计的数据库,SQL用二维表格表示实体以及实体之间的关系,对数据的操作也几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分组、合并、连接、选取等运算来实现数据库的管理。 常见的关系型数据库有: Orcale MySQL Microsoft SQL server PostgreSQL SQLLite MariaDB 关系型数据库特点 事务性
事情起因 有个同事需要一个管理系统,需要管理一些图片什么的,我就想着让他用我写的这套系统,然后就想着把代码和库复制一份出来给他用就可以了,然后我顺便可以把一些需要写到配置里的东西提炼下,让这套系统成为一个可复制部署的 CMS 系统。 实操删库过程 第一步 很熟练的把代码复制一份,nginx 配置复制并修改一份。 第二步:删库 登陆数据库 新建库、切到新建库 删库:因为我部署这个博客系统的时候有把初始化数据库的 sql 文件放到服务器上,我看了下还在。然后直接source init.sql。 3步完成之后,有种莫名的感觉涌上心头,然后打开我的博客,发现里面数据已经空了。。其实我这里使用了Ph
最近做了一个简单的短链接服务,短链接使用自增 id 转化为 62 进制(10 个数字+26个小写字母+26个大写字母),但是发现插入数据库报了索引插入重复。 展示 创建测试表 CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `short_url` varchar(255) NOT NULL COMMENT '测试', PRIMARY KEY (`id`), UNIQUE KEY `short_url` (`short_url`) ) ENGINE=InnoDB AUTO_INCREMENT
今天要查询一个根据手机号返回用户的姓名,但是想要的 SQL 查询的结果的顺序和 in 后面数组里手机号顺序一样,使用 order by field(phone,111,222) select name,phone from users where phone in (18800000000,18800000000001) order by field(phone, 18800000000,18800000000001)
MySQL修改表的存储引擎有三种方式 alter table 该方式需要执行很长时间 mysql> alter table mytable engine=InnoDB; 导入导出 使用mysqldump导出表,修改导出文件里的create table后面表的名称。 创建新的表。 mysqldump导出的表里会包含drop table,所以要注意!删除该句。防止数据丢失 创建和查询 mysql> create table new_table_name like table_name; mysql> alter table new_table_name engin