wget https://www.percona.com/redir/downloads/percona-toolkit/2.1.1/percona-toolkit-2.1.1-1.noarch.rpm wget https://pkgs.repoforge.org/perl-TermReadKey/perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm
rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm rpm -ivh percona-toolkit-2.1.1-1.noarch.rpm
依賴 perl(Term::ReadKey) >= 2.10,缺失會報錯。
tar xzvf percona-toolkit-2.1.1.tar.gz cd percona-toolkit-2.1.1 perl Makefile.PL make && make test && make install
pt-query-advisor、pt-show-grants、pt-upgradept-index-usage、pt-pmp、pt-visual-explainpt-config-diff、pt-variable-advisorpt-heartbeat、pt-query-digest、pt-deadlock-loggerpt-table-checksum、pt-table-sync、pt-slave-delaypt-diskstats、pt-stalk、pt-summarypt-archiver、pt-find、pt-kill、pt-duplicate-key-checker、pt-online-schema-changept-duplicate-key-checker --host=localhost --user=root --password=zhang@123 --databases=test
輸出:列出重複索引定義、生成 DROP INDEX 語句,一鍵優化索引冗餘。
原理:建影子表 → 修改結構 → 分塊拷貝數據 → 建觸發器同步增量 → 原子切換表名 → 刪舊表。
前提:表無觸發器、有主鍵/唯一索引。操作前必備份,官方文檔必讀。
--dry-run:僅建影子表驗證,不拷貝數據、不建觸發器、不切換。--execute:真正執行(無此參數僅做檢查退出)。--alter:DDL 子句(如 ENGINE=InnoDB、ADD COLUMN ...)。--lock-wait-time:獲取元數據鎖超時時間。# 大表轉 InnoDB pt-online-schema-change --user=root --password=zhang@123 --host=localhost --lock-wait-time=120 --alter="ENGINE=InnoDB" D=test,t=oss_pvinfo2 --execute # 大表加字段 pt-online-schema-change --user=root --password=zhang@123 --host=localhost --lock-wait-time=120 --alter="ADD COLUMN domain_id INT" D=test,t=oss_pvinfo2 --execute
日志輸出清晰記錄各階段:Creating new table... Altering... Creating triggers... Copying... Swapping... Dropping old table... Dropping triggers...
分析慢查詢/General Log/TCP 抓包中的 SQL,按預置規則報警(如 SELECT *、隱式類型轉換、無索引 JOIN 等)。注意:大文件分析存在性能 Bug(死循環),謹慎用於超大日志。
# 分析單條 SQL pt-query-advisor --query "SELECT * FROM aaa" # 分析 General Log pt-query-advisor /data/dbdata/general.log # 分析慢查詢 pt-query-advisor /data/dbdata/localhost-slow.log
# 導出所有用戶權限 (標準化格式) pt-show-grants --host=localhost --user=root --password=zhang@123 # 導出指定庫權限 pt-show-grants --host=localhost --user=root --password=zhang@123 --database=hostsops # 生成 REVOKE 收回語句 pt-show-grants --host=localhost --user=root --password=zhang@123 --revoke
在新舊實例並行執行同一組 SQL,對比結果集/錯誤/警告/耗時,升級驗收必備。
# 單條 SQL 對比 pt-upgrade h=localhost h=192.168.3.92 --user=root --password=zhang@123 --query="SELECT * FROM user_data.collect_data LIMIT 5" # 文件批量對比 pt-upgrade h=localhost h=192.168.3.92 --user=root --password=zhang@123 aaa.sql # 慢查詢文件對比 pt-upgrade h=localhost h=192.168.3.92 --user=root --password=zhang@123 slow.log # 僅對比執行時間 pt-upgrade h=192.168.3.91 h=192.168.3.92 --user=root --password=zhang@123 --query="SELECT * FROM user_data.collect_data" --compare query_times