官网:https://www.percona.com/downloads/percona-toolkit/LATEST/
percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。
这个工具套件对DBA及运维人员着实不可多得
1,下载

wget https://www.percona.com/downloads/percona-toolkit/3.1.0/binary/redhat/7/x86_64/percona-toolkit-3.1.0-2.el7.x86_64.rpm

2,安装

yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm

3,验证 安装完成后会生成以下命令:

[root@huazai007 src]# pt
pt-align                  pt-fk-error-logger        pt-pg-summary             pt-summary
pt-archiver               pt-heartbeat              pt-pmp                    pt-table-checksum
ptaskset                  pt-index-usage            pt-query-digest           pt-table-sync
pt-config-diff            pt-ioprofile              pt-secure-collect         pt-table-usage
pt-deadlock-logger        pt-kill                   pt-show-grants            pt-upgrade
pt-diskstats              pt-mext                   pt-sift                   pt-variable-advisor
pt-duplicate-key-checker  pt-mongodb-query-digest   pt-slave-delay            pt-visual-explain
pt-fifo-split             pt-mongodb-summary        pt-slave-find             ptx
pt-find                   pt-mysql-summary          pt-slave-restart
pt-fingerprint            pt-online-schema-change   pt-stalk

4 ,命令详解

pt-upgrade#该命令主要用于对比不同mysql版本下SQL执行的差异,通常用于升级前进行对比。#会生成SQL文件或单独的SQL语句在每个服务器上执行的结果、错误和警告信息等。pt-online-schema-change#功能为支持在线变更表构,且不锁定原表,不阻塞原表的DML操作。#该特性与Oracle的dbms_redefinition在线重定义表原理基本类似。pt-mysql-summary#对连接的mysql服务器生成一份详细的配置情况以及sataus信息#在尾部也提供当前实例的的配置文件的信息pt-mext#并行查看SHOW GLOBAL STATUS的多个样本的信息。#pt-mext会执行你指定的COMMAND,并每次读取一行结果,把空行分割的内容保存到一个一个的临时文件中,最后结合这些临时文件并行查看结果。pt-kill#Kill掉符合指定条件mysql语句pt-ioprofile#pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析pt-fingerprint#用于生成查询指纹。主要将将sql查询生成queryID,pt-query-digest中的ID即是通过此工具来完成的。#类似于Oracle中的SQL_ID,涉及绑定变量,字面量等pt-find#用与查找mysql表并执行指定的命令,类似于find命令pt-fifo-split#模拟切割文件并通过管道传递给先入先出队列而不用真正的切割文件pt-deadlock-logger#用于监控mysql服务器上死锁并输出到日志文件,日志包含发生死锁的时间、死锁线程id、死锁的事务id、发生死锁时事务执行时间等详细信息。pt-archiver#将mysql数据库中表的记录归档到另外一个表或者文件#该工具具只是归档旧的数据,对线上数据的OLTP查询几乎没有影响。#可以将数据插入另外一台服务器的其他表中,也可以写入到一个文件中,方便使用load data infile命令导入数据。pt-agent#基于Percona Cloud的一个客户端代理工具pt-visual-explain#用于格式化explain的输出pt-variable-advisor#用于分析mysql系统变量可能存在的一些问题,可以据此评估有关参数的设置正确与否。pt-stalk#用于收集mysql数据库故障时的相关信息便于后续诊断处理。pt-slave-delay#用于设定从服务器落后于主服务器的时间间隔。#该命令行通过启动和停止复制sql线程来设置从落后于主指定时间。pt-sift#用于浏览pt-stalk生成的文件。pt-show-grants#将当前实例的用户权限全部输出,可以用于迁移数据库过程中重建用户。pt-query-digest#用于分析mysql服务器的慢查询日志,并格式化输出以便于查看和分析。pt-pmp#为查询程序执行聚合的GDB堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总。pt-index-usage#从log文件中读取查询语句,并用分析当前索引如何被使用。#完成分析之后会生成一份关于索引没有被查询使用过的报告,可以用于分析报告考虑剔除无用的索引。pt-heartbeat#用于监控mysql复制架构的延迟。#主要是通过在主库上的--update线程持续更新指定表上的一个时间戳,从库上--monitor线程或者--check线程检查主库更新的时间戳并与当前系统时间对比,得到延迟值。pt-fk-error-logger#将外键相关的错误信息记录到日志或表。pt-duplicate-key-checker#功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来#同时也可以生成相应的drop index的语句pt-diskstats#类似于iostat,打印磁盘io统计信息,但是这个工具是交互式并且比iostat更详细。可以分析从远程机器收集的数据。pt-config-diff#用于比较mysql配置文件和服务器变量#至少2个配置源需要指定,可以用于迁移或升级前后配置文件进行对比pt-align#格式化输出pt-slave-find#连接mysql主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。pt-table-checksum#用于校验mysql复制的一致性。#该工具主要是高效的查找数据差异,如果存在差异性,可以通过pt-table-sync来解决

5,安装sysbench 性能压测工具

yum -y install sysbench

压测前的准备工作:
主库上操作:

MariaDB [(none)]> create database sbtest;MariaDB [(none)]> grant all on *.* to 'sbtest'@'172.18.47.110' identified by '123456';MariaDB [(none)]> flush privileges;

1 pt-heartbeat
用于监控主从延迟的工具

1.1 pt-heartbeat 原理
主库创建一张heartbeat表,表中有个时间戳字段。主库上pt-heartbeat的update线程会在指定时间间隔更新时间戳。

从库上的pt-heartbeat的monitor线程会检查复制的心跳记录,这个记录就是主库修改的时间戳。然后和当前系统时间进行对比,得出时间上的差异,差异值就是延迟的时间大小。由于heartbeat表中有server_id字段,在监控某个从库的延迟时指定参考主库的server_id即可。

1.2 pt-heartbeat 主要参数介绍

注意:需要指定的参数至少有 --stop,--update,--monitor,--check。
其中--update,--monitor和--check是互斥的,--daemonize和--check也是互斥。`--ask-pass`:隐式输入MySQL密码`--charset`:字符集设置`--check`:检查从的延迟,检查一次就退出,除非指定了--recurse会递归的检查所有的从服务器。`--check-read-only`:如果从服务器开启了只读模式,该工具会跳过任何插入。`--create-table`:在主上创建心跳监控的表,如果该表不存在。可以自己建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。CREATE TABLE heartbeat (ts                    varchar(26) NOT NULL,server_id             int unsigned NOT NULL PRIMARY KEY,file                  varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUSposition              bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUSrelay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUSexec_master_log_pos   bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS
);
heratbeat表一直在更改ts和position,而ts是我们检查复制延迟的关键。`--daemonize`:执行时,放入到后台执行`--user | -u`:连接数据库的帐号`--database | -D`:连接数据库的名称`--host|-h`:连接的数据库地址`--password | -p`:连接数据库的密码`--port | -P`:连接数据库的端口`--socket | -S`:连接数据库的套接字文件`--file 【--file=output.txt】`:打印--monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。`--frames 【--frames=1m,2m,3m】`:在--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。`--interval`:检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。`--log`:开启daemonized模式的所有日志将会被打印到制定的文件中。`--monitor`:持续监控从的延迟情况。通过--interval指定的间隔时间,打印出从的延迟信息,通过--file则可以把这些信息打印到指定的文件。`--master-server-id`:指定主的server_id,若没有指定则该工具会连到主上查找其server_id。`--print-master-server-id`:在--monitor和--check 模式下,指定该参数则打印出主的server_id。`--recurse`:多级复制的检查深度。模式M-S-S...不是最后的一个从都需要开启log_slave_updates,这样才能检查到。`--recursion-method`:指定复制检查的方式,默认为processlist,hosts。`--update`:更新主上的心跳表。`--replace`:使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。`--stop`:停止运行该工具(--daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。`--table`:指定心跳表名,默认heartbeat。

1.3 pt-heartbeat 实战
1): 主库创建 heartbeat心跳表,通过update执行更新时间戳,心跳表指定建立在sbtest库下

pt-heartbeat -S /var/lib/mysql/mysql.sock --database sbtest --update --create-table --daemonize

2): 主库利用sysbench模拟数据操作
prepare:准备压测数据 在sbtest库里建10张表,每张表里插入50w条数据
run:执行压测
cleanup:清除压测数据

[root@huazai007 src]# sysbench /usr/share/sysbench/oltp_read_write.lua \--mysql-host='172.18.47.110'  \
--mysql-user=sbtest  \
--mysql-password=123456 \
--mysql-port=3306  \
--db-driver=mysql  \
--mysql-db=sbtest  \
--tables=10  \
--table-size=500000 \
--report-interval=10 \
--threads=128 \
--time=120 \
prepare|run|cleanup

3):从库进行监测

[root@localhost src]# pt-heartbeat -S /var/lib/mysql/mysql.sock  --master-server-id=1 --monitor --database sbtest
0.00s [  8.57s, 66.24s, 22.64s ]
0.00s [  6.40s, 66.22s, 22.64s ]
0.00s [  4.25s, 66.20s, 22.64s ]
0.00s [  2.10s, 66.18s, 22.64s ]
0.00s [  0.00s, 66.15s, 22.64s ]
0.00s [  0.00s, 66.12s, 22.64s ]
0.00s [  0.00s, 66.09s, 22.64s ]
0.00s [  0.00s, 66.06s, 22.64s ]
0.00s [  0.00s, 66.02s, 22.64s ]结果表示有延时0s左右,中括号中的数据分别表示1m,5m,15m的平均值

2 pt-slave-restart
pt-slave-restart是一个可以跳过特定错误并自动重启slave的工具。

2.1 pt-slave-restart 原理
pt-slave-restart监控一个或者多个MySQL复制slave,试图跳过引起错误的语句。它以指数变化的睡眠时间职能地检查slave。你可以指定要跳过的错误然后运行slave一直到一个确定的binlog位置。

pt-slave-restart一旦检测到slave有错误就会打印一行。默认情况下该打印行为:时间戳、连接信息、relay_log_file,relay_log_pos,以及last_errno。你可以使用–verbose选项添加更多信息,也可以使用–quiet选项阻止所有输出。

2.2 pt-slave-restart 主要参数介绍

- ` --always `       :永不停止slave线程,手工停止也不行- ` --ask-pass`      :替换`-p`命令,不显示密码输入- ` --error-numbers` :指定跳过哪些错误,可用`,`进行分隔- ` --error-text`    :根据错误信息进行匹配跳过- ` --log`           :输出到文件- ` --recurse`       :在主端执行,监控从端- ` --runtime  `     :工具执行多长时间后退出:默认秒, m=minute,h=hours,d=days- ` --slave-user --slave-password` :从库的账号密码,从主端运行时使用- ` --skip-count  `  :一次跳过错误的个数,胆大的可以设置大些,不指定默认1个- `--master-uuid`   :级联复制的时候,指定跳过上级或者上上级事务的错误- ` --until-master`  :到达指定的master_log_pos,file位置后停止,格式:”file:pos“- `--until-relay`   :和上面一样,但根据relay_log的位置来停止- `--sleep`:默认值为1,检查slave间隔的初始sleep秒数。

2.3 pt-slave-restart 实战

#1. 在master上创建表
create table z1(id int not null,uname varchar(32),primary key(id));#2. 在slave上插入数据
set sql_log_bin=0;
set global read_only=off;
insert into z1(id,uname) values(3,'python');#3. 在master上插入数据
insert into z1(id,uname) values(2,'mysql');
insert into z1(id,uname) values(3,'java');#4. 在slave上查看复制状态
show slave status\G...Slave_IO_Running: YesSlave_SQL_Running: No
...Last_SQL_Errno: 1062Last_SQL_Error: Could not execute Write_rows event on table test.z1; Duplicate entry '3' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log my3306_binlog.000071, end_log_pos 1214#5. 在slave上使用pt-slave-restart跳过指定错误
[root@localhost src]# pt-slave-restart --error-numbers=1062
2019-12-12T16:54:56  mysql-relay.000006  1073644063 1062#6. 在slave上查看复制状态
···Slave_IO_Running: YesSlave_SQL_Running: Yes
···#说明复制已经正常,跳过了错误事务。#但是master与slave上的这张表数据不一致,所以这种修复方法只能算暂时的。#之后还需进行修复

3 pt-table-checksum
pt-table-checksum工具用来检查主从数据一致性

3.1 pt-table-checksum 原理
pt-table-checksum用于校验主从数据的一致性,该命令在主库上执行校验,然后对复制的一致性进行检查,来对比主从之间的校验值,并输出对比结果

3.2 pt-table-checksum 主要参数介绍

- `--[no]check-replication-filters`:是否检查复制的过滤器,默认是yes,建议启用不检查模式。- `--databases | -d`:指定需要被检查的数据库,多个库之间可以用逗号分隔。- `--[no]check-binlog-format`:是否检查binlog文件的格式,默认值yes。建议开启不检查。因为在默认的row格式下会出错。- `--replicate`:把checksum的信息写入到指定表中。- `--replicate-check-only`:只显示不同步信息

3.3 pt-table-checksum 实战
主库上操作:

[root@huazai007 ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=172.18.47.110,u=huazai007,p=123456,P=3306

返回值:

# A software update is available:TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
12-16T16:45:46      0      1        2          0       1       0   0.147 test.z1
#解释:
`TS` :完成检查的时间。
`ERRORS` :检查时候发生错误和警告的数量。
`DIFFS`:0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
`ROWS` :表的行数。
`CHUNKS` :被划分到表中的块的数目。
`SKIPPED` :由于错误或警告或过大,则跳过块的数目。
`TIME` :执行的时间。
`TABLE` :被检查的表名。
【注意】:
1)根据测试,需要一个即能登录主库,也能登录从库的账号;huazai007  123456
2)只能指定一个host,必须为主库的IP;
3)在检查时会向表加S锁;
4)运行之前需要从库的同步IO和SQL进程是YES状态。

4 pt-table-sync
用来修复主从数据不一致

4.1 pt-table-sync 原理
pt-table-sync高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

4.2 pt-table-sync 主要参数介绍

`--replicate` :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
`--databases` : 指定执行同步的数据库。
`--tables` :指定执行同步的表,多个用逗号隔开。
`--sync-to-master` :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
`h=` :服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。
`u=` :帐号。
`p=` :密码。
`--print` :打印,但不执行命令。
`--execute :执行命令。

4.3 pt-table-sync 实战
主库上执行以下命令
#print 修复命令
会把修复的sql语句打印出来

[root@huazai007 ~]# pt-table-sync --replicate=test.checksums h=172.18.47.110,u=huazai007,p=123456,P=3306 h=172.18.47.112,u=huazai007,p=123456,P=3306 --print
REPLACE INTO `test`.`z1`(`id`, `uname`) VALUES ('3', 'java') /*percona-toolkit src_db:test src_tbl:z1 src_dsn:P=3306,h=172.18.47.110,p=...,u=huazai007 dst_db:test dst_tbl:z1 dst_dsn:P=3306,h=172.18.47.112,p=...,u=huazai007 lock:1 transaction:1 changing_src:test.checksums replicate:test.checksums bidirectional:0 pid:7027 user:root host:huazai007*/;

#execute 修复命令

[root@huazai007 ~]# pt-table-sync --replicate=test.checksums h=172.18.47.110,u=huazai007,p=123456,P=3306 h=172.18.47.112,u=huazai007,p=123456,P=3306 --execute

##再使用pt-table-checksum 验证下

[root@huazai007 ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=172.18.47.110,u=huazai007,p=123456,P=3306
Checking if all tables can be checksummed ...
Starting checksum ...TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
12-16T17:06:33      0      0        2          0       1       0   0.075 test.z1
分类: mysql

PERCONA-TOOLKIT 安装相关推荐

  1. Percona Toolkit安装

    TIPS 本文基于Percona Toolkit 3.2.0,理论支持所有版本. Percona Toolkit是一款MySQL世界里面非常实用的工具套件,本文来探讨如何安装它. 工具列表 pt-al ...

  2. mysql开启yum search pt-mysql_Centos使用MySQL工具Percona Toolkit

    Centos使用MySQL工具Percona Toolkit 安装Percona Toolkit 的Repo 得以支持直接用yum 安装二进制包 yum install -y https://www. ...

  3. percona toolkit系列(gh-ost)

    背景 和上篇pt-osc同样功能的工具gh-ost(使用的是binlog复制数据),目前是为了修改表结构 online DDL 写在前面 (该工具并不是percona toolkit中的,只是为了读者 ...

  4. percona toolkit 简介

    os: centos 7.4 db: mysql 5.7 software: toolkit 3.0.8 percona toolkit 是一款percona公司推出的优秀的开源的mysql分析工具. ...

  5. Percona Toolkit工具简介

    系列文章目录 第一章:sql_mode模式 第二章:optimize table.analyze table.alter table.gh-ost 第三章:InnoDB MVCC原理 第四章:sql语 ...

  6. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载

    原文地址:https://www.percona.com/blog/2013/08/12/want-to-archive-tables-use-pt-archiver/ Percona Toolkit ...

  7. mysql 工具_最全Mysql运维工具Percona Toolkit使用案例

    Percona Toolkit简介 Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,DBA熟悉掌握后将极大提高工作效率. Percona toolkit有 ...

  8. Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程

    Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程 1.写在前面 2.工具包地址 3.Base Toolkit 4.HPC Toolkit ...

  9. percona的安装、启动、停止

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/tanliqing2010/article/details/78758878 0 前言 1 percon ...

  10. MySQL备份Percona Xtrabackup安装和卸载

    MySQL备份Percona Xtrabackup安装和卸载 Percona XtraBackup 安装介绍篇 XtraBackup介绍 XtraBackup是Percona公司的开源项目,用以实现类 ...

最新文章

  1. [转] 利用CORS实现跨域请求
  2. nodejs之connect
  3. Redis中的发布订阅模式
  4. Python Data Science的多版本多环境管理工具Anaconda
  5. ThinkPHP---RBAC
  6. SolarWinds 事件新动态:研究员发现新的C2基础设施
  7. 电脑远程服务_电脑远程维修专家在线服务
  8. 线程结束后会自动关闭_多线程学习之如何中断线程
  9. Java数据结构-约瑟夫问题(Joseph环)
  10. JAVA分布式架构设计实例
  11. 常用塑料的种类以及用途:
  12. 完整代码-Vue+Java后台实现省市区三级联动
  13. w10桌面计算机图标箭头去除,如何让win10桌面图标箭头取消除 笔记本电脑去掉快捷小箭头软件-♚付涛纪实阁♚...
  14. PAT乙级1068 万绿丛中一点红 (20 分)
  15. com组件 的劫持_IE首页被劫持跳转问题的解决方案
  16. 基于FPGA的PWM加减速控制实现
  17. dateframe取某列数据_DataFrame数据选取全攻略
  18. CSP-S初赛基础知识整理
  19. DNS协议——域名解析
  20. 计算机组成认知的笔记1000字,[转载]笔记整理——认知负荷理论

热门文章

  1. 学校计算机教室局域网的建立,校园局域网组建及配置.pdf
  2. html 滤镜兼容,CSS3 中各种滤镜介绍和兼容性说明 - 文章教程
  3. html动态日出,日出日落及方位角计算html
  4. bootstrap 横铺 行_bootstrap的布局(container、row、col-xs-4)
  5. Leecode刷题热题HOT100导航目录
  6. RHEL 8 - 配置基于安装 ISO 文件的 YUM Repo
  7. 边缘设备上的实时AI人员检测:检测视频中的人员
  8. 使用Protobuf推动微服务和REST API的开发
  9. odoo10参考系列--操作(Actions)
  10. bootstraptable 怎么在特定行添加数据_同等权限下多任职之间数据权限的实例