`pt-kill` 是 Percona Toolkit 中的一个实用工具,专门用于高效地杀死 MySQL 进程,特别是当数据库遇到如空闲连接过多、SQL查询导致高负载等问题时。它提供了多种参数,可以根据不同的条件筛选并终止特定的进程。下面将详细介绍 `pt-kill` 的常用参数及其用法。
1. **按用户(User)杀进程**
使用 `--match-user` 参数,你可以指定要杀掉的进程所属的用户。例如,`--match-user="dbUSER1 | dbUSER2,..."` 允许你指定一个或多个用户,多个用户之间使用竖线 `|` 分隔。这将杀死所有属于这些用户的活动进程。
2. **按主机(Host)杀进程**
通过 `--match-host` 参数,你可以按照连接到 MySQL 服务器的客户端 IP 地址来杀死进程。例如,`--match-host="192.168.10.10 | 192.168.10.11"` 可以杀死来自这些 IP 地址的所有进程。如果你不想包含某些特定 IP,可以使用 `--ignore-host` 参数。
3. **按命令(Command)杀进程**
使用 `--match-command` 和 `--ignore-command` 参数,你可以根据 MySQL 进程的状态来选择要杀掉的进程。例如,`--match-command="query | Execute"` 将杀死所有执行查询或执行操作的进程。命令的名称必须完全匹配(包括大小写),且多个命令之间用竖线 `|` 分隔。MySQL 中的常见命令包括 Query、Sleep、Binlog Dump 等。
4. **按状态(State)杀进程**
`--match-state` 参数允许你根据 MySQL 进程的当前状态来杀进程。比如,`--match-state="Locked | Sending data"` 将杀死所有处于锁定或发送数据状态的进程。状态名同样需要完全匹配,多个状态间用竖线 `|` 分隔。常见的状态包括 Locked、login、Sending data 等。
5. **按信息(Info)关键字杀进程**
`--match-info` 参数可让你通过 SQL 语句的关键字来筛选进程。例如,`--match-info="SELECT | DELETE"` 将杀死所有执行 SELECT 或 DELETE 查询的进程。如同之前,多个信息关键字之间使用竖线 `|` 分割。
此外,`pt-kill` 还有其他一些有用的参数:
- `--busy-time`:设置进程被认为是“忙碌”的最小持续时间,单位通常是秒。
- `--victim`:定义哪些类型的进程应该被杀死,如 `all` 表示所有匹配的进程。
- `--interval`:设置检查和杀死进程的时间间隔,单位也是秒。
- `--kill`:实际执行杀进程的操作。
- `--daemonize`:使 `pt-kill` 在后台运行。
- `--pid`:保存进程 ID 的文件路径。
- `--print`:在标准输出打印进程信息。
- `--log`:日志文件路径,记录 `pt-kill` 的操作。
正确使用 `pt-kill` 可以帮助系统管理员有效地管理和优化 MySQL 服务器的性能,避免因特定连接或查询导致的问题影响整个数据库服务。但在使用时,务必谨慎,确保你了解要杀掉的进程可能对数据库造成的影响。