pt-mysql-summary
友好地汇总 MySQL 数据库服务器的状态与配置,一眼了解服务器全貌。
语法
pt-mysql-summary [OPTIONS]它不是调优或诊断工具,而是产出便于 diff、可粘贴到邮件不丢格式的报告。 适用于任何现代 UNIX 系统。
用法示例
以下命令假定已通过 /etc/my.cnf、~/.my.cnf 或本机 socket 配置好 MySQL 连接;需显式指定连接时加 -h主机 -P端口 -u用户 --ask-pass 或 --defaults-file=/path/my.cnf(命令里不写明文密码)。命令可直接复制,替换其中的主机、库名与路径即可。
场景:出一份本地实例概览
巡检或故障排查时,快速汇总本地 MySQL 实例的版本、配置、InnoDB/MyISAM、复制与安全等全貌:
pt-mysql-summary场景:远程连接汇总
要汇总另一台服务器上的实例,显式指定连接信息并交互式输入密码(避免明文暴露):
pt-mysql-summary -h 10.0.0.5 -P 3306 -u admin --ask-pass场景:汇总所有库的 schema 对象
需要一页看清每个库里有多少表、视图、外键、各存储引擎分布时,开启全库汇总:
pt-mysql-summary --all-databases场景:只汇总部分业务库
只关心某几个业务库(避免把系统库一起 dump),用逗号分隔:
pt-mysql-summary --databases appdb,reportdb场景:落盘采样便于离线重出报告
把生成摘要所用的数据文件保存到目录,事后不连数据库也能重出报告:
pt-mysql-summary --save-samples /data/mysql-samples场景:用已保存采样重出报告
已有 --save-samples 落盘的目录时,直接基于这些文件重新生成报告:
pt-mysql-summary --read-samples /data/mysql-samples功能说明
连接 MySQL 服务器查询状态与配置信息,把数据保存到临时目录的文件中, 再用 awk 等脚本格式化输出。直接执行即可;也可以在命令后加 -- 并接常规的 MySQL 连接选项:
pt-mysql-summary --user=root工具假设你就在被检查的服务器上运行(例如能找到 my.cnf),不满足时也会优雅降级。 注意:输出不会区分信息来自 MySQL 还是从机操作系统——在一台服务器上运行、 连接另一台服务器上的 MySQL 时,可能出现令人困惑的输出。
模糊取整(fuzzy-rounding)
与 pt-summary 相同,多数计数刻意做模糊取整:先取整到最近的 5,然后 10、25, 再按 10 倍递增(50、100、250)……只显示数量级,便于跨服务器对比。 ("Schema"部分的所有数字是精确值。)
输出
报告主要包括以下部分:
- System time / Instances:报告生成时间与该机上检测到的 MySQL实例列表(来自
ps,不保证齐全)。 - Report On Port N:单个实例的快速摘要:用户、时间(来自 MySQL,可与系统时间对照)、 主机名、版本、启动时长、库数量、数据目录、连接进程数、复制状态、PID 文件。
- Processlist:
SHOW PROCESSLIST的聚合摘要(按 Command/User/Host/db/State 分组统计, 含行数、非 Sleep 数、Time 总和与最大值;按 Command 分组时包含所有行,其他分组排除 Sleep 行)。 - Status Counters:相隔约 10 秒的两次
SHOW GLOBAL STATUS快照中的增量计数器 (模糊取整):每列依次为"每天变化量(÷86400)"、"整个运行期的每秒均值"、 "报告生成时刻的每秒增速"。 - Table cache:表缓存大小与使用率。
- Key Percona Server features:Percona Server 特有功能的启用情况。
- Plugins / Query cache:插件状态;查询缓存开关、大小、使用率与命中/插入比。
- Schema(需
--databases或--all-databases):库中对象数量与类型、 各存储引擎的表数量、各类型索引数量、各数据类型的列数量。 由mysqldump --no-data生成而非查询 INFORMATION_SCHEMA(后者可能卡住繁忙服务器)。 - Noteworthy Technologies:全文索引、空间类型、外键、分区、InnoDB 压缩、SSL 等技术的使用情况。
- InnoDB:InnoDB 重要配置变量(buffer pool 大小/填充率/脏页率、页大小、日志文件、 刷写方式、XA、doublewrite、I/O 线程等),末尾几行来自
SHOW INNODB STATUS。 - MyISAM:key cache 大小、使用率与未刷写率。
- Security:mysql 系统库查询结果:用户数、匿名用户、无密码/旧式密码用户等安全隐患。
- Binary Logging:binlog 数量与大小、零尺寸 binlog(可能提示 binlog index 与磁盘不同步)、
binlog_format、expire_logs_days、sync_binlog、server_id等配置。 - Noteworthy Variables:值得注意的服务器变量(自增设置、各类 buffer 大小、日志相关变量等)。
- Configuration File:my.cnf 的美化打印(去注释、对齐)。工具通过
ps探测配置文件位置, 找不到时尝试常见位置;该文件不一定与报告对应的实例一致(跨机运行或探测失败时)。
下面是一段真实报告的开头(节选自官方文档示例,逐字照抄):
# Percona Toolkit MySQL Summary Report #######################
System time | 2012-03-30 18:46:05 UTC
(local TZ: EDT -0400)
# Instances ##################################################
Port Data Directory Nice OOM Socket
===== ========================== ==== === ======
12345 /tmp/12345/data 0 0 /tmp/12345.sock
12346 /tmp/12346/data 0 0 /tmp/12346.sock
12347 /tmp/12347/data 0 0 /tmp/12347.sock
# Report On Port 12345 #######################################
User | msandbox@%
Time | 2012-03-30 14:46:05 (EDT)
Hostname | localhost.localdomain
Version | 5.5.20-log MySQL Community Server (GPL)
Built On | linux2.6 i686
Started | 2012-03-28 23:33 (up 1+15:12:09)
Databases | 4
Datadir | /tmp/12345/data/
Processes | 2 connected, 2 running
Replication | Is not a slave, has 1 slaves connected
Pidfile | /tmp/12345/data/12345.pid (exists)
# Processlist ################################################
Command COUNT(*) Working SUM(Time) MAX(Time)
------------------------------ -------- ------- --------- ---------
Binlog Dump 1 1 150000 150000
Query 1 1 0 0
User COUNT(*) Working SUM(Time) MAX(Time)
------------------------------ -------- ------- --------- ---------
msandbox 2 2 150000 150000
Host COUNT(*) Working SUM(Time) MAX(Time)
------------------------------ -------- ------- --------- ---------
localhost 2 2 150000 150000
db COUNT(*) Working SUM(Time) MAX(Time)
------------------------------ -------- ------- --------- ---------
NULL 2 2 150000 150000
State COUNT(*) Working SUM(Time) MAX(Time)
------------------------------ -------- ------- --------- ---------
Master has sent all binlog to 1 1 150000 150000
NULL 1 1 0 0(以上为节选,完整示例见官方文档)
值得重点看的几处:
- System time / Instances:开头
System time与Instances列表对应前面说的"System time / Instances"部分,列出检测到的 MySQL 实例。 - Report On Port N:
Report On Port 12345这一段给出单实例摘要(用户、版本、启动时长、库数量、复制状态等),对应"Report On Port N"部分。 - Processlist:按
Command/User/Host/db/State分组的聚合统计,对应"Processlist"部分;注意Sleep行已被排除。
选项
-- 之后的所有选项传给 mysql。
| 选项 | 说明 |
|---|---|
--all-databases | mysqldump 并汇总所有数据库(见 --databases) |
--ask-pass | 连接 MySQL 时交互式询问密码 |
--config | 类型:string。读取逗号分隔的配置文件列表;如指定必须放在命令行第一个选项的位置 |
--databases | 类型:string。mysqldump 并汇总该逗号分隔的数据库列表;要汇总所有库请用 --all-databases |
-F, --defaults-file | 类型:string。只从给定文件读取 mysql 选项,必须给绝对路径 |
--help | 显示帮助并退出 |
-h, --host | 类型:string。要连接的主机 |
--list-encrypted-tables | 默认:false。包含所有库中加密表的列表;查询 Information Schema 可能较慢 |
-p, --password | 类型:string。连接密码(含逗号需转义) |
-P, --port | 类型:int。连接端口 |
--read-samples | 类型:string。从该目录中的文件生成报告 |
--save-samples | 类型:string。把生成摘要所用的数据文件保存到该目录 |
--sleep | 类型:int;默认:10。收集状态计数器时的睡眠秒数 |
-S, --socket | 类型:string。连接使用的 socket 文件 |
-u, --user | 类型:string。登录用户(若非当前用户) |
--version | 显示版本并退出 |
其他信息
系统要求:需要 Bash v3+、Perl 5.8+ 和 binutils(多数发行版已自带);BSD 系统可能需要挂载 procfs。
作者:Baron Schwartz, Brian Fraser, Daniel Nichter
环境变量:本工具不使用环境变量(所有 Percona Toolkit 工具均支持
PTDEBUG=1调试,注意调试输出会暴露命令行中的密码)通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。