首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Percona Toolkit 復制與監控類工具深度指南:pt-heartbeat、pt-table-checksum、pt-table-sync、pt-query-digest 等

     編輯:MySQL 資料庫相關知識

復制類工具

1. pt-heartbeat:精準監控主從延遲(秒級)

原理:主庫定期更新 heartbeat 表時間戳 → 從庫復制該記錄 → 監控端對比從庫時間戳與系統時間,得出真實延遲(不依賴 Seconds_Behind_Master)。

表結構(建議 MEMORY 引擎)

CREATE TABLE heartbeat (
  ts VARCHAR(26) NOT NULL,
  server_id INT UNSIGNED NOT NULL PRIMARY KEY,
  file VARCHAR(255) DEFAULT NULL,
  position BIGINT UNSIGNED DEFAULT NULL,
  relay_master_log_file VARCHAR(255) DEFAULT NULL,
  exec_master_log_pos BIGINT UNSIGNED DEFAULT NULL
);

三大模式

# 主庫:後台每 1 秒更新(--daemonize)
pt-heartbeat -D test --update --user=root --password=zhang@123 -h192.168.3.135 --create-table --daemonize

# 從庫:持續監控輸出延遲
pt-heartbeat -D test --monitor --user=root --password=zhang@123 -h192.168.3.92
# 輸出:0.00s [ 0.00s, 0.00s, 0.00s ] ...

# 從庫:單次檢查退出
pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.168.3.92

# 支持 PostgreSQL (--dbi-driver Pg)

2. pt-slave-delay:人為製造從庫延遲(延遲從庫/災備)

通過啟停 SQL 線程,讓從庫落後主庫指定時間(--delay),檢查間隔 --interval(默認 1 分鐘)。

# 落後 1 分鐘,每 15 秒檢查,運行 10 分鐘
pt-slave-delay --user=root --password=zhang@123 --delay 1m --interval 15s --run-time 10m --host=192.168.3.92

3. pt-slave-find:發現拓撲下所有從庫層級關系

pt-slave-find --user=root --password=zhang@123 --host=192.168.3.135

4. pt-slave-restart:自動重啟斷開的復制

# 監控並跳過 1 個錯誤
pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --skip-count=1

# 只跳過錯誤碼 1062 (Duplicate Entry)
pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --error-numbers=1062

5. pt-table-checksum:主從數據一致性校驗

原理:主庫對表分塊計算 checksum(REPLACE INTO checksums 表) → 復制到從庫 → 從庫計算同塊 checksum → 對比 this_crc vs master_crc。

# 首次運行需創建 checksums 表 (--create-replicate-table)
pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --create-replicate-table --host=192.168.3.135 -uroot -pzhang@123

# 僅顯示不一致的表 (需先跑過全量校驗)
pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --replicate-check-only --lock-wait-timeout=120 --host=192.168.3.135 -uroot -pzhang@123

關鍵表結構:checksums (db, tbl, chunk, this_crc, this_cnt, master_crc, master_cnt, ... PK(db,tbl,chunk))

6. pt-table-sync:高效同步修復不一致數據

原則:總在主庫執行修改,經復制流向從庫,不直接改從庫。執行前必備份,先用 --print/--dry-run 預覽。

# 同步單表 135->92
pt-table-sync --execute --user=root --password=zhang@123 h=192.168.3.135,D=test,t=aaa h=192.168.3.92

# 同步整庫 (從庫視角 --sync-to-master)
pt-table-sync --execute --sync-to-master --user=root --password=zhang@123 h=192.168.3.92 --database test

# 根據 checksum 結果同步
pt-table-sync --execute --replicate test.checksums --user=root --password=zhang@123 h=192.168.3.135
pt-table-sync --execute --replicate test.checksums --sync-to-master --user=root --password=zhang@123 h=192.168.3.92,D=test,t=aaa

監控類工具

1. pt-deadlock-logger:死鎖信息收集存檔

# 打印死鎖詳情
pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print

# 存入表並打印 (表結構需預建)
pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print D=test,t=deadlocks

2. pt-fk-error-logger:外鍵錯誤收集(注意版本 Bug)

通過 SHOW ENGINE INNODB STATUS 提取最近外鍵錯誤。作者測試遇到 Perl 未初始化值報錯,建議升級版本或排查腳本。

3. pt-mext:並行采集多次 SHOW GLOBAL STATUS

# 每 10 秒采集 3 次並合並顯示
pt-mext -- mysqladmin ext -uroot -pzhang@123 -i10 -c3

4. pt-query-digest:慢查詢/通用日志/TCP 抓包深度分析

# 分析慢查詢文件
pt-query-digest --user=root --password=zhang@123 /data/dbdata/localhost-slow.log

# 審查模式:結果存入 query_review 表 (需預建表結構)
pt-query-digest --user=root --password=zhang@123 --review h=localhost,D=test,t=query_review /data/dbdata/localhost-slow.log

5. pt-trend:慢查詢時間序列統計

pt-trend /data/dbdata/localhost-slow.log
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved