Percona Toolkit 除核心復制/分析工具外,還提供 pt-archiver 數據歸檔、pt-find 物件查找執行、pt-kill 異常查詢熔斷、pt-config-diff 配置漂移檢測、pt-mysql-summary 實例健康體檢、pt-variable-advisor 參數風險掃描六大進階工具。本文實戰演示參數詳解、典型場景與組合拳打法。
核心價值: 分批次、低影響地將歷史數據歸檔至他表/文件/異構庫,或直接清理,支援 LOAD DATA 高效回導。
# 1. 歸檔至遠端表 + 本地日誌文件 (每 1000 行提交)
pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root -ppass \
--dest h=192.168.3.92,D=sanmao,t=oss_log \
--file '/var/log/oss_log_archive_20120605.log' \
--where "id <= 100000" --commit-each
# 2. 僅歸檔至文件 (不寫入遠端表)
pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root -ppass \
--file '/var/log/oss_log_archive_20120607.log' \
--where "id <= 160000" --commit-each
# 3. 直接刪除 (慎用!--purge 表示刪除源數據)
pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root -ppass \
--purge --where 'id <= 167050'
# 關鍵提示:UTF-8 環境需在 my.cnf [client] 設 default-character-set=utf8,否則導出文件中文亂碼
類 Unix find,針對 MySQL 物件: 按時間、大小、引擎、名稱模式查找表,並執行任意 SQL。
| 場景 | 命令示例 |
|---|---|
| 查找 1 天前創建的 InnoDB 表 | pt-find --ctime +1 --engine InnoDB --user=root -ppass -h192.168.3.135 |
| 查找 1 天前修改、名稱匹配 %hostops%、MyISAM 表 → 轉 InnoDB | pt-find --mtime +1 --dblike hostsops --engine MyISAM --exec "ALTER TABLE %D.%N ENGINE=InnoDB" --user=root -ppass -h192.168.3.135 |
| 查找 aaa、zhang 庫中的空表 → 刪除 | pt-find --empty aaa zhang --exec-plus "DROP TABLE %s" --user=root -ppass -h192.168.3.135 |
| 查找超過 100MB 的表 | pt-find --tablesize +100M --user=root -ppass -h192.168.3.135 |
佔位符: %D=數據庫、%N=表名、%s=库名.表名。
功能: 實時/離線分析 SHOW PROCESSLIST,殺死匹配條件的查詢(長事務、全表掃描、鎖等待)。
| 模式 | 命令示例 | 說明 |
|---|---|---|
| 實時殺掉 >60s 查詢 | pt-kill --busy-time 60 --kill --user=root -ppass -h192.168.3.135 | 直接 KILL |
| 實時僅打印 >60s 查詢 | pt-kill --busy-time 60 --print --user=root -ppass -h192.168.3.135 | 預覽/審計 |
| 離線分析進程列表文件 | mysql -e "show processlist" > pl.txt; pt-kill --test-matching pl.txt --busy-time 60 --print | 事後分析/審計 |
常用匹配條件: --busy-time、--match-command、--match-user、--match-db、--match-state、--victims (選擇策略:oldest/youngest/all)。
類 diff,對比: 文件 vs 文件、文件 vs 實例、實例 vs 實例。輸出差異變量名、值對比。
| 對比場景 | 命令示例 |
|---|---|
| 本地實例 vs 遠程實例 | pt-config-diff h=localhost h=192.168.3.92 --user=root -ppass |
| 本地配置文件 vs 遠程實例 | pt-config-diff /etc/my.cnf h=192.168.3.92 --user=root -ppass |
| 兩個配置文件對比 | pt-config-diff /usr/local/mysql/share/mysql/my-large.cnf /usr/local/mysql/share/mysql/my-medium.cnf |
輸出示例:
22 config differences Variable localhost.localdomain localhost.localdomain binlog_cache_size 8388608 2097152 have_ndbcluster DISABLED NO innodb_buffer_pool_size 1677721600 1073741824 ...
一鍵生成: 配置、狀態、Schema、複製、InnoDB、性能 Schema 等全維度摘要,適合巡檢歸檔、故障現場保存、交接文檔。
# 本地實例
pt-mysql-summary -- --user=root -ppass --host=localhost
# 遠程實例
pt-mysql-summary -- --user=root -ppass --host=192.168.3.92
報告核心板塊: 版本/啟動時間、配置差異( vs 默認)、InnoDB 內存/IO/鎖/事務、複製狀態、Top 消耗查詢、Schema 統計、文件系統/內存/CPU。
基於最佳實踐規則集: 掃描 SHOW VARIABLES,輸出風險等級、問題描述、建議值、參考文檔。
| 掃描源 | 命令示例 |
|---|---|
| 實時實例 | pt-variable-advisor --user=root -ppass h=localhost |
| 配置文件 (需標準格式) | pt-variable-advisor --source-of-variables my.cnf --user=root -ppass |
典型檢測項: innodb_buffer_pool_size 過小、sync_binlog!=1、query_cache_size 過大、max_connect_errors 過小、innodb_log_file_size 過小、tmp_table_size/max_heap_table_size 不匹配等。
pt-config-diff 對比所有實例 vs 黃金配置模板,差異納入變更管理;pt-variable-advisor 全實例掃描,高風險項發起優化工單;pt-mysql-summary 生成月度健康報告,趨勢對比;pt-archiver 按業務保留策略歸檔冷數據,釋放熱存儲;pt-find 定位 → ALTER TABLE / DROP 批量執行;pt-kill --print 旁路模式驗證規則 → 低峰 --kill 實戰。