Skip to content

pt-mysql-summary

友好地汇总 MySQL 数据库服务器的状态与配置,一眼了解服务器全貌。

语法

bash
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、复制与安全等全貌:

bash
pt-mysql-summary

场景:远程连接汇总

要汇总另一台服务器上的实例,显式指定连接信息并交互式输入密码(避免明文暴露):

bash
pt-mysql-summary -h 10.0.0.5 -P 3306 -u admin --ask-pass

场景:汇总所有库的 schema 对象

需要一页看清每个库里有多少表、视图、外键、各存储引擎分布时,开启全库汇总:

bash
pt-mysql-summary --all-databases

场景:只汇总部分业务库

只关心某几个业务库(避免把系统库一起 dump),用逗号分隔:

bash
pt-mysql-summary --databases appdb,reportdb

场景:落盘采样便于离线重出报告

把生成摘要所用的数据文件保存到目录,事后不连数据库也能重出报告:

bash
pt-mysql-summary --save-samples /data/mysql-samples

场景:用已保存采样重出报告

已有 --save-samples 落盘的目录时,直接基于这些文件重新生成报告:

bash
pt-mysql-summary --read-samples /data/mysql-samples

功能说明

连接 MySQL 服务器查询状态与配置信息,把数据保存到临时目录的文件中, 再用 awk 等脚本格式化输出。直接执行即可;也可以在命令后加 -- 并接常规的 MySQL 连接选项:

bash
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 文件。
  • ProcesslistSHOW 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_formatexpire_logs_dayssync_binlogserver_id 等配置。
  • Noteworthy Variables:值得注意的服务器变量(自增设置、各类 buffer 大小、日志相关变量等)。
  • Configuration File:my.cnf 的美化打印(去注释、对齐)。工具通过 ps 探测配置文件位置, 找不到时尝试常见位置;该文件不一定与报告对应的实例一致(跨机运行或探测失败时)。

下面是一段真实报告的开头(节选自官方文档示例,逐字照抄):

text
# 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 timeInstances 列表对应前面说的"System time / Instances"部分,列出检测到的 MySQL 实例。
  • Report On Port NReport On Port 12345 这一段给出单实例摘要(用户、版本、启动时长、库数量、复制状态等),对应"Report On Port N"部分。
  • Processlist:按 Command/User/Host/db/State 分组的聚合统计,对应"Processlist"部分;注意 Sleep 行已被排除。

选项

-- 之后的所有选项传给 mysql。

选项说明
--all-databasesmysqldump 并汇总所有数据库(见 --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 调试安全提示、系统要求基线,见 通用说明

更多细节请阅读 官方文档

Percona Toolkit 中文文档 · 社区维护的第三方学习站