专栏首页DBA随笔Percona Toolkit工具简介

Percona Toolkit工具简介

pt工具介绍

Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等,DBA熟悉掌握后将极大提高工作效率。

CentOS 7下安装

1.安装Perl相关的模块

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

[root@testdb_172_16_123_101 /root]# yum -y install https://www.percona.com/downloads/percona-toolkit/3.0.1/binary/redhat/7/x86_64/percona-toolkit-3.0.1-1.el7.x86_64.rpm

安装后,可以通过下面的命令确认是否安装成功:

# pt-query-digest --help

# pt-table-checksum --help

如果命令提示可以正常显示,则说明pt工具已经正常安装和使用了。

有32个命令,可以分为7大类:

上面是pt工具各个命令的基本功能介绍,可以使用 command --help 来查看每个命令的具体作用和使用方法;

有的命令也可以使用 man command 命令查询相关命令详细信息。

目前使用的比较多的命令是: pt-query-digest ,pt-kill等命令。

介绍 1.找出重复的索引和外键 pt-duplicate-key-checker 这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便 2.执行alter的时候不会阻塞写和读取操作 pt-online-schema-change 非常有名的工具,工作原理是创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中先创建一个触发器,把新插入和更改的数据同步到新表,再copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认动作是将原表drop掉。所以,如果表中已经定义了触发器这个工具就不能工作了。也要注意数据的备份问题. 3.分析日志记录里面的sql或者直接整条sql,并提出建议 pt-query-advisor 实际意义不大,对于分析大文件容易出现卡死. 4.格式化显示mysql权限 pt-show-grants 实际意义不大,主要是比较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秒的连接.

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis数据库详解

    在Redis中,我们在使用相关命令时实际上是在默认的数据库中执行的,因为在Redis中是有很多个数据库的,不同数据库与数据库之间数据是不同步的,那么在这一篇中,...

    吉林乌拉
  • 江湖急诏令:腾讯数据库王者挑战赛赏金万两募英豪!

    导语 | 由腾讯云、腾讯云+社区、云+创业主办的腾讯数据库王者挑战赛开始啦!只需要花几分钟参加比赛免费将☟☟抱回家! MacBook/iPhone 11/Ai...

    腾讯数据库技术
  • 高频面试题:什么是B树?为啥文件索引要用B树而不用二叉查找树?

    小秋:树形结构例如想 B 树,B+ 树,二叉查找树都是有序的,所以查询效率很高,可以再 O(logn) 的时间复杂度查找到目标数据。

    乔戈里
  • 「大型网站架构设计」—— 前言

    根据大型网站的特点,该架构能够解决大多数的技术问题。下面我们将这个架构图进行简单的分解。

    tomas家的小拨浪鼓
  • ​深入了解分布式事务组件 Seata (一)

    分布式事务的问题,在微服务架构中一直是难题。单体应用实现本地事务即可,到了分布式环境,情况就变得复杂。一个请求可能涉及多个服务,上下游存在依赖关系,其中的一环失...

    aoho求索
  • 国产数据库部署初体验

    达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。本次将进行DM8的开发版本的部署。

    July
  • Serverless 最佳实践之数据库的连接和查询

    在第一讲云函数的生命周期中,我们已经提到了在云函数 Mount 阶段创建数据库连接带来的两方面好处:

    朱峰
  • HTTP缓存和浏览器的本地存储

    http请求做为影响前端性能极为重要的一环,因为请求受网络影响很大,如果网络很慢的情况下,页面很可能会空白很久。对于首次进入网站的用户可能要通过优化接口性能和接...

    用户5807183
  • 如何写一手快SQL

    博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。...

    用户4143945
  • 推荐系统数据集大列表

    今天给大家介绍一个github仓库,收集了非常多的推荐系统的数据集,非常的全面,非常的实用,做推荐系统相关的同学可以收藏一下。

    石晓文

扫码关注云+社区

领取腾讯云代金券