pt(Percona Toolkit)工具介绍
一.介绍
1.找出重复的索引和外键
pt-duplicate-key-checker
例子:[root@node1 ~]# pt-duplicate-key-checker --user=root --password='abc123'
# ########################################################################
# Summary of indexes
# ########################################################################
# Total Indexes 89
这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便
2.执行alter的时候不会阻塞写和读取操作
pt-online-schema-change
非常有名的工具,工作原理是创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中先创建一个触发器,把新插入和更改的数据同步到新表,再copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认动作是将原表drop掉。所以,如果表中已经定义了触发器这个工具就不能工作了。也要注意数据的备份问题.
3.分析日志记录里面的sql或者直接整条sql,并提出建议
pt-query-advisor
实际意义不大,对于分析大文件容易出现卡死.
4.格式化显示mysql权限
pt-show-grants
例子:[root@node1 ~]# pt-show-grants --user=root --password='abc123'
实际意义不大,主要是比较mysql权限以及进行版本控制
5.在多台服务器上执行查询,并比较有什么不同
pt-upgrade
这在升级服务器的时候非常有用,可以先安装并导数据到新的服务器上,然后使用这个工具跑一下sql看看有什么不同,可以找出不同版本之间的差异。
6.用explain分析sql如何利用索引并生成报告
pt-index-usage
可以直接从慢查询中获取sql,FILE文件中的sql格式必须和慢查询中个是一致,如果不是一直需要用pt-query-digest转换一下。也可以不生成报告直接保存到数据库中
7.查询程序执行聚合的GDB堆栈跟踪并汇总
pt-pmp
看起来很复杂,其实属于底层程序行为效率跟踪
8.格式化explain出来的执行计划按照tree方式输出
pt-visual-explain
没有实际意义,只是方便阅读
9.比较mysql配置文件和服务器参数
pt-config-diff
最少必须指定两个配置文件源,就像unix下面的diff命令一样,如果配置完全一样就不会输出任何东西,有时候用来排除配置差异造成的问题.
10.对mysql的配置和sataus信息进行汇总
pt-mysql-summary
连接mysql后查询出status和配置信息保存到临时目录中,然后用awk和其他的脚本工具进行格式化
11.分析mysql的参数变量并给出建议
pt-variable-advisor
实际意义有限,还是按自己需求来配置最实际,特别是多实例场景,这个建议毫无意义.
12.汇总mysql死锁的相关信息
pt-deadlock-logger
收集和保存mysql上最近的死锁信息,可以直接打印死锁信息和存储死锁信息到数据库中,死锁信息包括发生死锁的服务器、最近发生死锁的时间、死锁线程id、死锁的事务id、发生死锁时事务执行了多长时间等等非常多的信息,对于频繁出现死锁的情况,建议开一段时间来收集信息.
13.汇总mysql外键错误信息
pt-fk-error-logger
通过SHOW INNODB STATUS提取和保存mysql数据库最近发生的外键错误信息。可以通过参数控制直接打印错误信息或者将错误信息存储到数据库的表中.然而现在很少用外键了,也不建议用外键.
14.查看SHOW GLOBAL STATUS的多个样本的信息
pt-mext
实际意义不大,手动执行然后分析其实也不难.
15.分析sql日志并生成报告,最后给出建议
pt-query-digest
很出名的工具,多用来分析统计慢查询,也可以统计一般sql日志,运行速度快,信息清晰.它可以分析binlog、General log、slowlog,也可以通过SHOW PROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
16.按时间统计sql日志并生成报告
pt-trend
实际意义不大,例如:读取本地慢查询日志并输出统计信息.
17.监控mysql复制延迟
pt-heartbeat
会生成一个数据表,记录延时时间,不过功能做得不是太好,如果没有数据库完全控制权或者网络问题,还是慎用,容易造成数据不一致.
18.设置从服务器落后于主服务器指定时间
pt-slave-delay
建议不用,功能做得不好,容易搞挂主从结构,到时不得不重做主从就麻烦了.
19.查找和打印mysql所有从服务器复制层级关系
pt-slave-find
连接mysql主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。
20.监视mysql复制错误,并尝试重启mysql复制
pt-slave-restart
监视一个或者多个mysql复制错误,当从停止的时候尝试重新启动复制。属于监控相关
21.检查mysql复制一致性
pt-table-checksum
很出名的工具,只需要在master上执行即可,通常总是和pt-table-sync协作。工作原理:pt-table-checksum在主上执行检查语句在线检查mysql复制的一致性,然后通过复制传递到从,再通过update更新master_src的值。通过检测从上this_src和master_src的值从而判断复制是否一致。最后把检查报告写到某个位置,等待pt-table-sync调用。根据原理来说,它对于binlog_format要求是Statement和Mixed才能正常使用,对于row模式来说,则会报错不能使用。所以使用前要注意进行更改配置,set global binlog_format=STATEMENT来使用,不然就使用不了,运行完改回去就可以了。也要注意需要一定权限,最好用root.
22.同步mysql主从库差异表的数据
pt-table-sync
很出名的工具,主从复制本身存在一些缺陷,在极端情况下会出现从库多了数据,或者少了数据的情况,这个时候就需要人为修复,这个工具可以帮到我们。原理:通过pt-table-checksum得到的数据,列出或直接执行修改复制的差异数据,使其重新同步。总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失.执行execute之前最好先换成--print或--dry-run查看一下会变更哪些数据。
23.磁盘io监控工具
pt-diskstats
和iostat有点像,但是这个工具是交互式并且比iostat更详细。也可以分析从远程机器收集的数据。
24.模拟切割文件并通过管道传递给先入先出队列
pt-fifo-split
实际用的不多,通过读取大文件中的数据并打印到fifo文件,每次达到指定行数就往fifo文件中打印一个EOF字符,读取完成以后,关闭掉fifo文件并移走,然后重建fifo文件,打印更多的行。这样可以保证你每次读取的时候都能读取到制定的行数直到读取完成。注意此工具只能工作在类unix操作系统。这个程序对大文件的数据导入数据库非常有用,
25.显示系统信息概况
pt-summary
此工具会运行和多命令去收集系统状态和配置信息,先保存到临时目录的文件中去,然后运行一些unix命令对这些结果做格式化,最好是用root用户或者有权限的用户运行此命令。
26.收集mysql的用于诊断的数据
pt-stalk
遇到一些疑难杂症的时候,可以拿来测试并获取问题数据.原理:pt-stalk等待触发条件触发,然后收集数据帮助错误诊断,它被设计成使用root权限运行的守护进程,因此你可以诊断那些你不能直接观察的间歇性问题。默认的诊断触发条件为SHOW GLOBAL STATUS。也可以指定processlist为诊断触发条件 ,使用--function参数指定。
27.将mysql数据库中表的记录归档到另外一个表或者文件
pt-archiver
这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将数据插入另外一台服务器的其他表中,也可以写入到一个文件中,方便使用load data infile命令导入数据。另外你还可以用它来执行delete操作。这个工具默认的会删除源中的数据。使用的时候请注意。
28.查找mysql表并执行指定的命令,和find命令类似。
pt-find
库少的话用途不大,当你的库很多,表也很多的时候,而又忘记了自己要查的表名的时候,还是挺有用的.
29.Kill掉符合指定条件mysql语句
pt-kill
加入没有指定文件的话pt-kill连接到mysql并通过SHOW PROCESSLIST找到指定的语句,反之pt-kill从包含SHOW PROCESSLIST结果的文件中读取mysql语句.例如:删除运行超过60秒的连接.