Percona-Toolkit 示例说明

以 Percona-Toolkit-3.0 测试,参考地址:https://www.percona.com/doc/percona-toolkit/3.0/index.html

pt-align

列对齐

vmstat | pt-align

pt-archiver

将MySQL表中的记录存档到另一个表或文件中,原表只保留最近一行,其他记录都会清除 (提前在目标库创建表结构)

# 既保存到目标表,同时保存到文件(非sql)

pt-archiver \
--source h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo,t=test \
--dest h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo_bak,t=test \
--file '/root/archive/test-'$(date -d today +"%Y%m%d") \
--where "1=1" --limit 100 --commit-each

扫描二维码关注公众号,回复: 5067955 查看本文章

pt-config-diff

比较 MySQL 配置文件和服务器变量的不同

pt-config-diff /etc/my.cnf /usr/local/mysql/support-files/my-small.cnf

 

pt-config-diff /etc/my.cnf h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock

 

pt-config-diff \
h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \
h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock

pt-deadlock-logger

标准输出死锁信息,可记录到表或文件中

# 死锁同时写进目标表和文件(以下示例:运行10秒,每2秒检查一次)

pt-deadlock-logger --run-time=10s --interval=2 --create-dest-table \

h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--dest h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock,D=demo,t=deadlocks \

--log '/root/archive/deadlocks.log'

 

pt-diskstats

磁盘IO信息

# 等待10秒输出一次,共输出3次(除了第一次有列名,后面没有列名)

pt-diskstats --iterations=3 --interval=10 --show-timestamps --headers=scroll

 

# 保存到文件

pt-diskstats --iterations=3 --interval=10 --save-samples='/root/archive/diskstats.log'

pt-duplicate-key-checker

 MySQL 重复键检查

pt-duplicate-key-checker h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo_bak

 

pt-duplicate-key-checker h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--databases=demo_bak --tables=test

pt-fifo-split

 将某文件转为 fifo 输出(如下将某文件按指定行数拆分到多个文件中)

# 1. 先读取文件

pt-fifo-split --offset=1 --lines=10 --force --statistics --fifo=/tmp/fifo /root/samplesfile.txt

# 2. 再划分到多个文件

while [ -e /tmp/fifo ]; do cat /tmp/fifo > /root/samplesfile_$i.txt ; (( i++ )); echo $i; done

pt-find

 MySQL 数据库操作

# 创建时间大于1天并且存储引擎为 MyISAM 的所有表

pt-find --host=localhost --port=3306 --user=root --password=mysql \

--socket=/tmp/mysql3306.sock --ctime +1 --engine MyISAM

# 执行 sql 语句

pt-find --host=localhost --port=3306 --user=root --password=mysql \

--socket=/tmp/mysql3306.sock --noquote --exec "alter table demo.test2 add newcol int"

# 打印数据库所有表

pt-find --host=localhost --port=3306 --user=root --password=mysql \

--socket=/tmp/mysql3306.sock --noquote --print 'demo'

pt-fingerprint

 参数化SQL

pt-fingerprint --query "select a, b, c from users where id = 500"

pt-fk-error-logger

 记录MySQL外键错误

# 外键错误显示

pt-fk-error-logger h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock

# 外键错误输出到表,仅一次

pt-fk-error-logger h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock --iterations 1

# 外键错误输出到表 demo.fke

pt-fk-error-logger h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--dest h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo,t=fke

pt-heartbeat

 监控MySQL复制延迟

# 更新到表,每2秒一次,替换原记录

pt-heartbeat h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--create-table --database=demo --interval=2 --update --replace

 

pt-heartbeat h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--create-table --database=demo --interval=2 --run-time=10s --monitor

 

pt-heartbeat h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--create-table --database=demo --print-master-server-id \

--check h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock

pt-index-usage

 从慢查询日志中读取查询并分析索引(目标库将创建几张表存储分析信息)

pt-index-usage /usr/local/mysql/data3306/server176-slow.log \

-hlocalhost -P3306 -uroot -pmysql -Ddemo -S/tmp/mysql3306.sock \

--no-report --save-results-database \

h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo_bak

pt-ioprofile

 某进程IO监控

pt-ioprofile --profile-process=mysqld --cell=sizes --run-time=10

pt-ioprofile --profile-pid=28737 --cell=times --group-by=pid

pt-kill

 杀掉符合某些条件的mysql 查询

#运行30秒,每5秒检查一次,打印执行超过2秒的查询

pt-kill h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--run-time=30 --interval=5 --busy-time 2 --print

# 60 秒的查询杀掉

pt-kill h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock --busy-time 60 --kill

pt-mext

 多次迭代 “SHOW GLOBAL STATUS”结果放在同一行中(每次迭代多一列结果)

# 每10秒一次,5次迭代(有4列值,每列值为两次迭代间的差值)

pt-mext -r -- mysqladmin -hlocalhost -P3306 -uroot -pmysql ext -i10 -c5

pt-mongodb-query-digest

 Mongodb 慢查询分析

pt-mongodb-query-digest 127.0.0.1:27017/test

pt-mongodb-summary

 收集MongoDB集群的信息

pt-mongodb-summary 127.0.0.1:27017

pt-mysql-summary

 收集mysql的信息

pt-mysql-summary --host=localhost --port=3306 --user=root --password=mysql --socket=/tmp/mysql3306.sock

pt-online-schema-change

 不加锁进行 ALTER 表

# 如增加字段

pt-online-schema-change h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock,D=demo,t=test \

--alter "ADD COLUMN c1 INT" --print --execute

pt-pmp

 输出指定程序的堆栈信息

#迭代5次,间隔2秒

pt-pmp --binary mysqld --iterations 5 --interval 2

pt-query-digest

 从日志、processlist和tcpdump分析MySQL查询

#读慢查询日志

pt-query-digest /usr/local/mysql/data3306/server176-slow.log

#查询 processlist

pt-query-digest --processlist h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock

pt-secure-collect

 收集、清理、打包和加密数据。将收集:pt-stalk、pt-summary、pt-mysql-summary

# 收集信息(如加密,打包为: .tar.gz.aes)

pt-secure-collect collect --bin-dir=/usr/bin \

--temp-dir="/root/pt_collection" --no-encrypt --no-remove-temp-files \

--mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=mysql

pt-show-grants

 导出MySQL授权脚本

#所以用户创建及授权脚本

pt-show-grants h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock

# 输出指定用户权限,同时输出回收权限的脚本

pt-show-grants h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--only=replication,sysbench --revoke

pt-sift

 展示由pt-stalk 收集创建的文件信息(可使用 pt-secure-collect 的结果)

pt-sift /root/pt_collection

pt-slave-delay

 有意使MySQL从服务器落后于其主服务器

# 指定延迟的 slave

pt-slave-delay --delay=10m --interval=30s --run-time=30m \

h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock --daemonize

pt-slave-find

 输出MySQL复制层次结构的树状视图

# (双主复制无法正常显示……)

pt-slave-find h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock

pt-slave-restart

 监控MySQL从库,可跳过错误并重启复制

pt-slave-restart h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock \

--error-numbers=1677,1062 --daemonize

pt-stalk

 收集服务器、数据库诊断数据,文件保存到指定目录中

pt-stalk --no-stalk --iterations=2 --sleep=30 --host=localhost \

--dest=/root/ptstalk_collection --port=3306 --user=root --password=mysql --socket=/tmp/mysql3306.sock

pt-summary

 输出服务器状态和配置(信息多)

# 结果保存到指定目录

pt-summary --save-samples=/root/summary

# 附加其他输出

pt-summary --summarize-mounts

pt-summary --summarize-network

pt-summary --summarize-processes

pt-table-checksum

 验证MySQL复制完整性(包括行数)

pt-table-checksum h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--databases=demo --tables=test,heartbeat --replicate=percona.checksums \

--check-binlog-format --check-plan --nocreate-replicate-table

pt-table-sync

 有效地同步MySQL表数据(修复数据,参考校验pt-table-checksum)

# 输出修复语句
pt-table-sync --sync-to-master h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock \
--databases=demo --tables=test --print
# 直接修复从库数据
pt-table-sync --sync-to-master h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock \
--databases=demo --tables=test --execute

pt-table-usage

 从日志或查询中分析使用的表

pt-table-usage /usr/local/mysql/data3306/server176-slow.log

 

pt-table-usage h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

--query="explain select * from information_schema.tables where table_schema='demo'"

pt-upgrade

 验证查询结果在不同服务器上是否相同(开销大)

pt-upgrade --progress=time,5 --read-only --run-time=1m \

--type rawlog /usr/local/mysql/data3306/server176-slow.log \

h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock \

h=localhost,P=3307,u=root,p=mysql,S=/tmp/mysql3307.sock \

--log=/root/pt-upgrade.log --daemonize

pt-variable-advisor

 分析MySQL变量并对可能出现的问题提出建议

pt-variable-advisor h=localhost,P=3306,u=root,p=mysql,S=/tmp/mysql3306.sock --source-of-variables=mysql

pt-visual-explain

 将EXPLAIN以树形输出

pt-visual-explain -hlocalhost -P3306 -uroot -pmysql -Ddemo -S/tmp/mysql3306.sock \

--connect /usr/local/mysql/data3306/server176-slow.log

 

mysql -hlocalhost -P3306 -uroot -pmysql -Ddemo -S/tmp/mysql3306.sock \

-e "explain select * from information_schema.tables where table_schema='demo'" \

| pt-visual-explain

猜你喜欢

转载自blog.csdn.net/kk185800961/article/details/85016523