percona-toolkit工具包的安装和使用


percona-toolkit工具包的安装和使用

percona-toolkit工具包同percona-xtrabackup一样都是用Perl写的工具包,percona-toolkit工具包是一组高级的管理mysql的工具包集,可以用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,在生产环境中能极大的提高效率,安装也很简单。


1.检查和安装与Perl相关的模块

    PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境。

    依赖包检查命令为:

rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL

    如果有依赖包确实,可以使用下面的命令安装:

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

wget http://pkgs.repoforge.org/perl-TermReadKey/perl-TermReadKey-2.30-1.el3.rf.x86_64.rpm 
rpm -ivh perl-TermReadKey-2.30-1.el3.rf.x86_64.rpm 
wget https://www.percona.com/downloads/percona-toolkit/2.2.14/RPM/percona-toolkit-2.2.14-1.noarch.rpm 
rpm -ivh percona-toolkit-2.2.14-1.noarch.rpm

 如果不能下载: 直接进入页面下载rpm包:

   1,https://centos.pkgs.org/   搜索: perl-TermReadKey  下载

   2,https://www.percona.com/downloads/  进入下载页面下载

[root@rhel6lhr Packages]# rpm -ivh perl-Net-LibIDN-0.12-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:perl-Net-LibIDN        ########################################### [100%]
[root@rhel6lhr Packages]# rpm -ivh perl-Net-SSLeay-1.35-9.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:perl-Net-SSLeay        ########################################### [100%]
[root@rhel6lhr Packages]# rpm -ivh  perl-IO-Socket-SSL-1.31-2.el6.noarch.rpm 
Preparing...                ########################################### [100%]
   1:perl-IO-Socket-SSL     ########################################### [100%]


注意:需要安装Term::ReadKey 包,否则会报perl(Term::ReadKey) is needed by percona-toolkit-2.2.14-1.noarch


2:下载和安装percona toolkit的包

http://pkgs.repoforge.org/perl-TermReadKey/(key)

https://www.percona.com/downloads/percona-toolkit/ (tool)


yum install percona-toolkit

或:

tar  -zxvf percona-toolkit-3.0.13_x86_64.tar.gz
export PATH=$PATH:/usr/local/percona-toolkit-3.0.13/bin

可以加入/etc/profile文件中。

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

# pt-query-digest --help

# pt-table-checksum --help

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




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

工具类别

工具命令

工具作用

备注

开发类

pt-duplicate-key-checker

列出并删除重复的索引和外键

pt-online-schema-change

在线修改表结构

pt-query-advisor

分析查询语句,并给出建议,有 bug

已废弃

pt-show-grants

规范化和打印权限

pt-upgrade

在多个服务器上执行查询,并比较不同

性能类

pt-index-usage

分析日志中索引使用情况,并出报告

pt-pmp

为查询结果跟踪,并汇总跟踪结果

pt-visual-explain

格式化执行计划

pt-table-usage

分析日志中查询并分析表使用情况

pt 2.2新增命令

配置类

pt-config-diff

比较配置文件和参数

pt-mysql-summary

mysql配置和 status进行汇总

pt-variable-advisor

分析参数,并提出建议

监控类

pt-deadlock-logger

提取和记录 mysql死锁信息

pt-fk-error-logger

提取和记录外键信息

pt-mext

并行查看 status样本信息

pt-query-digest

分析查询日志,并产生报告

常用命令

pt-trend

按照时间段读取 slow日志信息

已废弃

复制类

pt-heartbeat

监控 mysql复制延迟

pt-slave-delay

设定从落后主的时间

pt-slave-find

查找和打印所有 mysql复制层级关系

pt-slave-restart

监控 salve错误,并尝试重启 salve

pt-table-checksum

校验主从复制一致性

pt-table-sync

高效同步表数据

系统类

pt-diskstats

查看系统磁盘状态

pt-fifo-split

模拟切割文件并输出

pt-summary

收集和显示系统概况

pt-stalk

出现问题时,收集诊断数据

pt-sift

浏览由 pt-stalk创建的文件

pt 2.2新增命令

pt-ioprofile

查询进程 IO并打印一个 IO活动表

pt 2.2新增命令

实用类

pt-archiver

将表数据归档到另一个表或文件中

pt-find

查找表并执行命令

pt-kill

Kill掉符合条件的 sql

常用命令

pt-align

对齐其他工具的输出

pt 2.2新增命令

pt-fingerprint

将查询转成密文

pt 2.2新增命令

 

 

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

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

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

加字段例子:

   

pt-online-schema-change  --alter "add column attribute3 varchar(100)" h=192.168.1.142,P=3306,p=cc.123,u=root,D=orabenlai,t=oraesb  --no-check-replication-filters  --execute

   说明:   1, 如果有  binlog_ignore_db = mysql 选型会报 check-replication-filters  错误,必须加上  --no-check-replication-filters

              2, --execute  前面是有2个"-"

              3,加多个字段可以使用: "add column attribute1 varchar(100),add column attribute2 varchar(100)"




percona-toolkit 使用教程  

一、  percona-toolkit 简介  

percona-toolkit 是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的 mysql 任务和系统任务,这些任务包括:  

检查 master slave 数据的一致性  

有效地对记录进行归档

  查找重复的索引  

对服务器信息进行汇总  

分析来自日志和 tcpdump 的查询  

当系统出问题的时候收集重要的系统信息  

percona-toolkit 源自 Maatkit Aspersa 工具,这两个工具是管理 mysql 的最有名的工具,现在 Maatkit 工具已经不维护了,请大家还是使用 percona-toolkit 吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的 DBA ,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。  

二、  percona-toolkit 工具包安装  

1.   软件包下载  

访问 http://www.percona.com/software/percona - toolkit/   载最新版本的 Percona Toolkit 或者通过如下命令行来获取最新的版本:  

wget percona . com /get/ percona - toolkit . tar . gz wget percona . com /get/ percona - toolkit . rpm

我这里选择直接从网站上找到最新版本下载:  

wget http://www.percona.com/redir/downloads/percona - toolkit/2.1.1/percona - t oolkit - 2.1.1 - 1.noarch.rpm   wget http://www.percona.com/redir/downloads/percona - toolkit/2.1.1/percona - t oolkit - 2.1.1.tar.gz  

  http://pkgs.repoforge.org/perl - TermReadKey/ 载最新的 TermReadKey  

wget http://pkgs.repoforge.org/perl - TermReadKey/perl - TermReadKey - 2.30 - 1.el5.

rf.x86_64.rpm  

 

2.   软件包安装  

我的环境是 Centos 5.5 64 BIT

A.  percona - toolkit rpm 安装方式  

rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm rpm -ivh percona-toolkit-2.1.1-1.noarch.rpm

注意:需要安装 Term::ReadKey 包,否则会报 perl(Term::ReadKey) >= 2.10

is needed by percona-toolkit-2.1.1-1.noarch 错误  

B.  percona - toolkit 的编译安装方式  

tar xzvf percona-toolkit-2.1.1.tar.gz cd percona-toolkit-2.1.1 perl Makefile.PL make make test

make install

 

三、   percona-toolkit 的使用  

根据 percona-toolkit 的工具类型可以总结出下面五个类别,方便大家进行学习和实践,下面就针对这些不同的类别来分别介绍这些工具的用法。  

( )   开发类工具  

1.  pt-duplicate-key-checker

功能介绍:功能为从 mysql 表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便  

用法介绍:  

pt-duplicate-key-checker [OPTION...] [DSN]

包含比较多的选项,具体的可以通过命令 pt-duplicate-key-checker  

--help 来查看具体支持那些选项,我这里就不一一列举了。 DNS 为数据库或者表。  

使用示例:  

查看 test 数据库的重复索引和外键使用情况使用如下命令  

pt-duplicate-key-checker   --host=localhost

--password=zhang@123  --databases=test

--user=root

   

2.  pt-online-schema-change

功能介绍:功能为在 alter 操作更改表结构的时候不用锁定表,也就是说执行 alter 的时候不会阻塞写和读取操作, 注意执行这个工具的时候必须做好备份,操作之前最好详细读一下官方文档 http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-ch ange.html  

工作原理是创建一个和你要执行 alter 操作的表一样的空表结构,执行表结构修改,然后从原表中 copy 原始数据到表结构修改后的表,当数据 copy 完成以后就会将原表移走,用新表代替原表,默认动作是将原表 drop 掉。在 copy 数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。 如果表中已经定义了触发器这个工具就不能工作了。  

用法介绍:  

pt-online-schema-change [OPTIONS] DSN

options 可以自行查看 help DNS 为你要操作的数据库和表。这里有两个参数需要介绍一下:  

--dry-run   这个参数不建立触发器,不拷贝数据,也不会替换原表。只是创建和更改新表。  

-- execute     这个参数的作用和前面工作原理的介绍的一样,会建立触发器,来保证最新变更的数据会影响至新表。 注意:如果不加这个参数,这个工具会在执行一些检查后退出。这一举措是为了让使用这充分了解了这个工具的原理,同时阅读了官方文档。  

使用示例:范例 1 :在线更改表的的引擎,这个尤其在整理 innodb 表的时候非常有用,示例如下:  

pt-online-schema-change --user=root --password=zhang@123 --host=l ocalhost --lock-wait-time=120 --alter="ENGINE=InnoDB" D=test,t=oss_ pvinfo2 --execute

从下面的日志中可以看出它的执行过程:  

Altering `test`.`oss_pvinfo2`...

Creating new table...

Created new table test._oss_pvinfo2_new OK.

Altering new table...

Altered `test`.`_oss_pvinfo2_new` OK.

Creating triggers...

Created triggers OK.

Copying approximately 995696 rows...

Copied rows OK.

Swapping tables...

Swapped original and new tables OK.

Dropping old table...

Dropped old table `test`.`_oss_pvinfo2_old` OK.

Dropping triggers...

Dropped triggers OK.

Successfully altered `test`.`oss_pvinfo2`.

范例 2 :大表添加字段的,语句如下 :

pt-online-schema-change --user=root --password=zhang@123 --host=l ocalhost --lock-wait-time=120 --alter="ADD COLUMN domain_id INT"  D=test,t=oss_pvinfo2 --execute

3.  pt-query-advisor

功能介绍:根据一些规则分析查询语句,对可能的问题提出建议,这些评判规则大 http://www.percona.com/doc/percona - toolkit/2.1/pt - query - advisor.ht

ml 这里就不详细列举了。那些查询语句可以来自慢查询文件、 general 日志文件或者使用 pt-query-digest 截获的查询语句。目前这个版本有 bug ,当日志文件非常大的时候会需要很长时间甚至进入死循环。  

用法介绍:  

pt-query-advisor /path/to/slow-query.log

pt-query-advisor --type genlog mysql.log pt-query-digest --type tcpdump.txt --print --no-report | pt-query-advisor

 

使用示例:分析一个语句的例子:  

pt-query-advisor --query "select * from aaa"

分析 general log 中的查询语句的例子:  

pt-query-advisor /data/dbdata/general.log

分析慢查询中的查询语句的例子:  

pt-query-advisor /data/dbdata/localhost-slow.log

 

4.  pt-show-grants

功能介绍:规范化和打印 mysql 权限,让你在复制、比较 mysql 权限以及进行版本控制的时候更有效率!  

用法介绍:  

pt-show-grants [OPTION...] [DSN]

选项自行用 help 查看, DSN 选项也请查看 help ,选项区分大小写。  

使用示例:查看指定 mysql 的所有用户权限:  

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

 

5.  pt-upgrade

功能介绍:在多台服务器上执行查询,并比较有什么不同!这在升级服务器的时候非常有用,可以先安装并导数据到新的服务器上,然后使用这个工具跑一下 sql 看看有什么不同,可以找出不同版本之间的差异。  

用法介绍:  

pt-upgrade [OPTION...] DSN [DSN...] [FILE]

比较文件中每一个查询语句在两个主机上执行的结果,并检查在每个服务器上执行的结果、错误和警告。  

使用示例:只查看某个 sql 在两个服务器的运行结果范例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123 --query="select * from user_data.collect_data limit 5"

查看文件中的对应 sql 在两个服务器的运行结果范例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123  aaa.sql

查看慢查询中的对应的查询 SQL 在两个服务器的运行结果范例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123  slow.log

此外还可以执行 compare 的类型,主要包含三个 query_times,results,warnings ,比如下面的例子,只比较 sql 的执行时间  

pt-upgrade h=192.168.3.91 h=192.168.3.92 --user=root --password=z hang@123 --query="select * from user_data.collect_data" --compar e query_times

 

( )   性能类工具  

1.  pt-index-usage

功能介绍:从 log 文件中读取插叙语句,并用 explain 分析他们是如何利用索引。

完成分析之后会生成一份关于索引没有被查询使用过的报告。  

用法介绍:  

pt-index-usage [OPTION...] [FILE...]

可以直接从慢查询中获取 sql FILE 文件中的 sql 格式必须和慢查询中个是一致,如果不是一直需要用 pt-query-digest 转换一下。也可以不生成报告直接保存到数据库中,具体的见后面的示例  

使用示例:从满查询中的 sql 查看索引使用情况范例:  

pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --use r=root --password=zhang@123

将分析结果保存到数据库范例:  

pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --use r=root --password=zhang@123  --no-report --create-save-results-data base

  使用 --create-save-results-database 会自动生成数据库和表来保存结果。  

2.  pt-pmp

功能介绍:为查询程序执行聚合的 GDB 堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总。  

用法介绍:  

pt-pmp [OPTIONS] [FILES]

使用示例:  

pt-pmp -p 21933 pt-pmp -b /usr/local/mysql/bin/mysqld_safe

3.  pt-visual-explain

功能介绍:  

格式化 explain 出来的执行计划按照 tree 方式输出,方便阅读。  

用法介绍:  

pt-visual-explain [OPTION...] [FILE...]

option 请参阅官方网站,这里不一一例举!  

使用示例:查看包含 explain 结果的 aaa 文件的范例:  

pt-visual-explain  aaa

查看包含查询语句的 aaa 文件的范例:  

pt-visual-explain --connect aaa --user=root --password=zhang@123  

通过管道直接查看 explain 输出结果的范例:  

mysql -uroot -pzhang@123  -e "explain select email from test.colle ct_data where id=101992419" |pt-visual-explain

 

( )   配置类工具  

1.  pt-config-diff

功能介绍:比较 mysql 配置文件和服务器参数  

用法介绍:  

pt-config-diff [OPTION...] CONFIG CONFIG [CONFIG...]

CONFIG 可以是文件也可以是数据源名称,最少必须指定两个配置文件源,就像 unix 下面的 diff 命令一样,如果配置完全一样就不会输出任何东西。  

使用示例:范例 1 :查看本地和远程服务器的配置文件差异:  

pt-config-diff h=localhost h=192.168.3.92 --user=root --password=zha ng@123

比较出来内容如下:  

22 config differences

Variable                                   localhost.localdomain localhost.localdomain

========================= =====================

===================== binlog_cache_size         8388608               2097152 have_ndbcluster           DISABLED              NO innodb_additional_mem_... 16777216              33554432 innodb_buffer_pool_size   1677721600            1073741824

 

范例 2 :比较本地配置文件和远程服务器的差异:  

pt-config-diff /etc/my.cnf h=192.168.3.92 --user=root --password=zha ng@123   

比较出来内容如下:  

12 config differences

Variable                  /etc/my.cnf localhost.localdomain ========================= =========== ===================== binlog_cache_size         8388608     2097152 binlog_format             mixed       MIXED

 

范例 3 :比较本地两个配置文件的差异:  

pt-config-diff /usr/local/mysql/share/mysql/my-large.cnf  /usr/local/m ysql/share/mysql/my-medium.cnf

2.  pt-mysql-summary

功能介绍:精细地对 mysql 的配置和 sataus 信息进行汇总,汇总后你直接看一眼就能看明白。  

用法介绍:  

pt-mysql-summary [OPTIONS] [-- MYSQL OPTIONS]

工作原理:连接 mysql 后查询出 status 和配置信息保存到临时目录中,然后用 awk 和其他的脚本工具进行格式化。 OPTIONS 可以查阅官网的相关页面。  

使用示例:范例 1 :汇总本地 mysql 服务器的 status 和配置信息:  

pt-mysql-summary -- --user=root --password=zhang@123 --host=local host

范例 2 :汇总本地 mysql 服务器 192.168.3.92 status 和配置信息:  

pt-mysql-summary -- --user=root --password=zhang@123 --host=192. 168.3.92

3.  pt-variable-advisor

功能介绍:分析 mysql 的参数变量,并对可能存在的问题提出建议  

用法介绍:  

pt-variable-advisor [OPTION...] [DSN]

原理:根据预先定义的规则检查 show variables 中的配置错误的设置和值。  

使用示例:  

范例 1 :从 localhost 获取变量值  

pt-variable-advisor --user=root --password=zhang@123  localhost 范例 2 :从指定的文件中读取配置,这个有格式要求  

pt-variable-advisor --user=root --password=zhang@123  

--source-of-variables my.cnf   

 

( )   监控类工具  

1.  pt-deadlock-logger

功能介绍:提取和记录 mysql 死锁的相关信息  

用法介绍:  

pt-deadlock-logger [OPTION...] SOURCE_DSN

收集和保存 mysql 上最近的死锁信息,可以直接打印死锁信息和存储死锁信息到数据库中,死锁信息包括发生死锁的服务器、最近发生死锁的时间、死锁线程 id 、死锁的事务 id 、发生死锁时事务执行了多长时间等等非常多的信息。详情见下面的示例。  

使用示例:范例 1 :打印本地 mysql 的死锁信息  

pt-deadlock-logger  --user=root --password=zhang@123 h=localhost

–print

范例 2 :将本地的 mysql 死锁信息记录到数据库的表中,也打印出来  

pt-deadlock-logger  --user=root --password=zhang@123 h=localhost

--print D=test,t=deadlocks

2.  pt-fk-error-logger

功能介绍:提取和记录 mysql 外键错误信息  

用法介绍:  

pt-fk-error-logger [OPTION...] SOURCE_DSN

通过 SHOW INNODB STATUS 提取和保存 mysql 数据库最近发生的外键错误信息。可以通过参数控制直接打印错误信息或者将错误信息存储到数据库的表中。  

使用示例:我在服务器上运行的时候一直报如下错误:  

Use of uninitialized value in concatenation (.) or string at /usr/bin

/pt-fk-error-logger line 2045

我怀疑是这个程序有问题,回头换一个版本试一下或者调试一下那个程序。  

 

3.  pt-mext

功能介绍:  

并行查看 SHOW GLOBAL STATUS 的多个样本的信息。  

用法介绍:  

pt-mext [OPTIONS] -- COMMAND

原理: pt-mext 执行你指定的 COMMAND ,并每次读取一行结果,把空行分割的内容保存到一个一个的临时文件中,最后结合这些临时文件并行查看结果。  

使用示例:范例 1 :每隔 10s 执行一次 SHOW GLOBAL STATUS ,并将结果合并到一起查看  

pt-mext  -- mysqladmin ext -uroot -pzhang@123  -i10 -c3

 

4.  pt-query-digest

功能介绍:分析查询执行日志,并产生一个查询报告,为 MySQL PostgreSQL  memcached 过滤、重放或者转换语句。  

用法介绍:  

pt-query-digest [OPTION...] [FILE]

解析和分析 mysql 日志文件  

使用示例:范例 1 :分析本地的慢查询文件  

pt-query-digest --user=root --password=zhang@123 /data/dbdata/loc alhost-slow.log

范例 2 :重新回顾满查询日志,并将结果保存到 query_review 中,注意 query_review 表的表结构必须先建好,表结构如下:  

CREATE TABLE query_review (    checksum     BIGINT UNSIGNED NOT NULL PRIMARY KEY,    fingerprint  TEXT NOT NULL,    sample       TEXT NOT NULL,    first_seen   DATETIME,    last_seen    DATETIME,    reviewed_by  VARCHAR(20),    reviewed_on  DATETIME,    comments     TEXT

);

命令如下:  

pt-query-digest --user=root --password=zhang@123 --review h=localh ost,D=test,t=query_review /data/dbdata/localhost-slow.log

5.   pt-trend

功能介绍:居于一组时间序列的数据点做统计。  

用法介绍:  

pt-trend [OPTION...] [FILE ...]

读取一个慢查询日志,并输出统计信息。也可以指定多个文件。如果不指定文件的话直接从标准输入中读取信息。  

使用示例:范例 1 :读取本地慢查询日志并输出统计信息  

pt-trend /data/dbdata/localhost-slow.log

          这里输出的信息没有说明,有点看不明白!  

 

( )   复制类工具  

1.   pt-heartbeat

功能介绍:监控 mysql 复制延迟  

用法介绍:  

pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop

测量复制落后主 mysql 或者主 PostgreSQL 多少时间,你可以使用这个脚本去更新主或者监控复制,具体用法见后面的示例 .

原理: pt-heartbeat 通过真实的复制数据来确认 mysql postgresql 复制延迟,这个避免了对复制机制的依赖,从而能得出准确的落后复制时间,包含两部分:第一部分在主上 pt-heartbeat --update 线程会在指定的时间间隔更新一个时间戳,第二部分是 pt-heartbeat --monitor 线程或者 --check 线程连接到从上检查复制的心跳记录(前面更新的时间戳),并和当前系统时间进行比较,得出时间的差异。  

你可以手工创建 heartbeat 表或者添加 - - 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 STATUS   position         bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS   relay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUS   exec_master_log_pos  bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS

);

 

l   使用示例:  

范例 1 :创建一个后台进程定期更新主上的 test 库的 heartbeat 表()默认是 1s ,可以 --interval 指定,执行后会成一个 heartbeat 表, test 库为我监控的同步库:  

pt-heartbeat -D test --update --user=root --password=zhang@123 -h

192.168.3.135 --create-table –daemonize

范例 2 :监控复制在 slave 上的落后程度(会一直监控):  

pt-heartbeat -D test --monitor --user=root --password=zhang@123 h192.168.3.92

监控结果如下:  

0.00s [  0.00s,  0.00s,  0.00s ] 0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

范例 3 :监控复制在 slave 上的落后程度(监控一次退出):  

pt-heartbeat -D test --check --user=root --password=zhang@123 -h1

92.168.3.92

范例 4 :监控 PostgreSQL 需要添加 --dbi-driver Pg  

pt-heartbeat -D test --check --user=root --password=zhang@123 -h1 92.168.3.92 --dbi-driver Pg

 

2.  pt-slave-delay

功能介绍:设置从服务器落后于主服务器指定时间。  

用法介绍:  

pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]

原理:通过启动和停止复制 sql 线程来设置从落后于主指定时间。默认是基于从上 relay 日志的二进制日志的位置来判断,因此不需要连接到主服务器,如果 IO 进程不落后主服务器太多的话,这个检查方式工作很好,如果网络通畅的话,一般 IO 线程落后主通常都是毫秒级别。一般是通过 -- delay   and --delay"+"--interval 来控制。 --interval 是指定检查是否启动或者停止从上 sql 线程的频繁度,默认的是 1 分钟检查一次。  

使用示例:范例 1 :使从落后主 1 分钟,并每隔 1 分钟检测一次,运行 10 分钟  

pt-slave-delay --user=root --password=zhang@123 --delay 1m --run-t ime 10m --host=192.168.3.92

如果不加 --run-time 参数会一直执行。  

范例 2 :使从落后主 1 分钟,并每隔 15 秒钟检测一次,运行 10 分钟  

pt-slave-delay --user=root --password=zhang@123 --delay 1m --inter val 15s --run-time 10m --host=192.168.3.92

运行结果如下:  

2012-05-20T16:34:50 slave running 0 seconds behind

2012-05-20T16:34:50 STOP SLAVE until 2012-05-20T16:35:50 at mas ter position mysql-bin.000032/4392054

2012-05-20T16:35:05 slave stopped at master position mysql-bin.00 0032/4397124

2012-05-20T16:35:20 slave stopped at master position mysql-bin.00 0032/4402194

2012-05-20T16:35:35 slave stopped at master position mysql-bin.00

0032/4407264

2012-05-20T16:35:50 no new binlog events

2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:0 5 mysql-bin.000032/4397124

 

3.  pt-slave-find

功能介绍:查找和打印 mysql 所有从服务器复制层级关系  

用法介绍:  

pt-slave-find [OPTION...] MASTER-HOST

原理 : 连接 mysql 主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。  

使用示例:  

范例 1 :查找主服务器为 192.168.3.135 mysql 有所有从的层级关系:  

pt-slave-find --user=root --password=zhang@123 --host=192.168.3.13 5

4.  pt-slave-restart

功能介绍:  

监视 mysql 复制错误,并尝试重启 mysql 复制当复制停止的时候  

用法介绍:  

pt-slave-restart [OPTION...] [DSN]

监视一个或者多个 mysql 复制错误,当从停止的时候尝试重新启动复制。你可以指定跳过的错误并运行从到指定的日志位置。  

使用示例:  

范例 1 :监视 192.168.3.92 的从,跳过 1 个错误  

pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.

92 --skip-count=1

  范例 2 :监视 192.168.3.92 的从,跳过错误代码为 1062 的错误。  

pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.

92 --error-numbers=1062

5.   pt-table-checksum

功能介绍:检查 mysql 复制一致性   

用法介绍:  

pt-table-checksum [OPTION...] [DSN]

工作原理: pt-table-checksum 在主上执行检查语句在线检查 mysql 复制的一致性,生成 replace 语句,然后通过复制传递到从,再通过 update 更新 master_src 的值。通过检测从上 this_src master_src 的值从而判断复制是否一致。  

注意:使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定。使用 -- max - load   指定最大的负载情况,如果达到那个负载这个暂停运行。如果发现有不一致的数据,可以使用 pt-table-sync 工具来修复。  

注意:和 1.0 版本不同,新版本的 pt-table-checksum 只需要在 master 上执行即可。  

通过  –explain 参数再结合二进制日志就可以看出脚本的工作原理,如我的 test 库有一个名字为 zhang 的表,我们通过抓取二进制日志来查看脚本的原理:  

REPLACE INTO `test`.`checksums` (db, tbl, chunk, chunk_index, lowe r_boundary, upper_boundary, this_cnt, this_crc) SELECT 'test', 'zhan g', '1', NULL, NULL, NULL, COUNT(*) AS cnt, COALESCE(LOWER(CON V(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `name`, CONCAT(ISNULL

(`name`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `test`.`zhang`

 /*checksum table*/;

UPDATE `test`.`checksums` SET chunk_time = '0.000563', master_crc  = '31012777', master_cnt = '4' WHERE db = 'test' AND tbl = 'zha ng' AND chunk = '1'

从这里可以很明显的看出原理了,前面已经说了,这里就不赘述了。  

l   使用示例:范例 1 :比较 test 数据库同步是否一致,结果显示所有的表。  

pt-table-checksum  --nocheck-replication-filters --databases=test --re plicate=test.checksums --create-replicate-table  --host=192.168.3.135

  --port 3306  -uroot -pzhang@123

参数说明:第一次运行的时候需要添加 --create-replicate-table 参数,如果不加这个就需要手工运行添加表结构的 SQL, 表结构 SQL 如下:  

CREATE TABLE checksums (    db             char(64)     NOT NULL,    tbl            char(64)     NOT NULL,    chunk          int          NOT NULL,    chunk_time     float            NULL,    chunk_index    varchar(200)     NULL,    lower_boundary text             NULL,    upper_boundary text             NULL,    this_crc       char(40)     NOT NULL,    this_cnt       int          NOT NULL,    master_crc     char(40)         NULL,    master_cnt     int              NULL,    ts             timestamp    NOT NULL,

   PRIMARY KEY (db, tbl, chunk),

   INDEX ts_db_tbl (ts, db, tbl)

) ENGINE=InnoDB;

之所以使用 --nocheck-replication-filters 参数是因为我的 my.cnf 配置了 replicate-ignore-db replicate-wild-do-table 等参数。另外需要特别注意执行的 checksums 所在的数据库必须是同步的数据库。我刚开始使用的时候摸索的很久,官网也没有范例。呵呵!结果如下:  

TS         ERRORS DIFFS  ROWS  CHUNKS SKIPPED  TIME TABLE

05-23T16:19:29  0   1        2   1  0  0.006 test.aaa

05-23T16:19:29  0   0        1   1  0  0.017 test.bbb

05-23T16:19:29  0   0        0   1  0  0.007 test.category_part

05-23T16:19:31  0   0   233617   6  0  1.887 test.collect_data

05-23T16:19:34  0   0   250346   5  0  2.709 test.effective_user

05-23T16:19:34  0   1        1   1  0  0.008 test.heartbeat

05-23T16:19:39  0   0  1000000  11  0  5.353 test.oss_pvinfo2

从结果中,我们可以看到 test.aaa test.heartbeat 表的 DIFFS 不为 ,那么就是这两个表不同步了。  

 

范例 2 :比较 test 数据库同步是否一致,结果只显示数据不一致的表

(添加 --replicate-check-only 参数即可)。  

pt-table-checksum  --nocheck-replication-filters --databases=test --re plicate=test.checksums --replicate-check-only --lock-wait-timeout=120   --host=192.168.3.135  --port 3306  --user=root --password=zhang

@123

结果如下:  

Differences on localhost.localdomain

TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDAR Y UPPER_BOUNDARY test.aaa 1 1 1    test.heartbeat 1 0 1

从结果可以看出,只显示了两个不同步的表。  

6.   pt-table-sync

功能介绍:高效同步 mysql 表的数据  

用法介绍:  

pt-table-sync [OPTION...] DSN [DSN...]

原理:总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失 . 执行 execute 之前最好先换成 --print --dry-run 查看一下会变更哪些数据。  

使用示例:  

范例 1 :同步 3.135 test 库的 aaa 表到 192.168.3.92 ,在执行之前可以用 --execute 参数换成 --print 来查看会变更什么东西,后面那个主机必须是 master ,否则会报错推出。  

pt-table-sync --execute --user=root --password=zhang@123 h=192.16

8.3.135,D=test,t=aaa h=192.168.3.92

范例 2 :将主的 test 数据库同步到 192.168.3.92 ,使从上具有一样的数据。  

pt-table-sync --execute --sync-to-master --user=root --password=zhan g@123  h=192.168.3.92 --database test

范例 3 :只同步指定的表  

pt-table-sync --execute --sync-to-master --user=root --password=zhan g@123  h=192.168.3.92 D=test,t=aaa

范例 4 :根据 pt-table-checksum 的结果进行数据同步  

pt-table-sync --execute --replicate test.checksums --user=root --pass word=zhang@123  h=192.168.3.135   

范例 5 :根据 pt-table-checksum 使从的数据和主的数据一致  

pt-table-sync --execute --replicate test.checksums --user=root --pass word=zhang@123  --sync-to-master h=192.168.3.92 D=test,t=aaa

 

( )   系统类工具  

1.  pt-diskstats

功能介绍:是一个对 GUN/LINUX 的交互式监控工具  

用法介绍:  

pt-diskstats [OPTION...] [FILES]

GUN/LINUX 打印磁盘 io 统计信息,和 iostat 有点像,但是这个工具是交互式并且比 iostat 更详细。可以分析从远程机器收集的数据。  

使用示例:  

范例 1 :查看本机所有的磁盘的状态情况:  

pt-diskstats

范例 2 :只查看本机 sda2 磁盘的状态情况  

pt-diskstats --devices-regex sda2

 

2.  pt-fifo-split

功能介绍:模拟切割文件并通过管道传递给先入先出队列而不用真正的切割文件  

用法介绍:  

pt-fifo-split [options] [FILE ...]

pt-fifo-split 读取大文件中的数据并打印到 fifo 文件,每次达到指定行数就往 fifo 文件中打印一个 EOF 字符,读取完成以后,关闭掉 fifo 文件并移走,然后重建 fifo 文件,打印更多的行。这样可以保证你每次读取的时候都能读取到制定的行数直到读取完成。注意此工具只能工作在类 unix 操作系统。这个程序对大文件的数据导入数据库非常有用,具体的可以查看 http://www.mysqlperformanceblog.com/2008/07

/03/how - to - load - large - files - safely - into - innodb - with - load - data - infile/  

 

使用示例:范例 1 :一个每次读取一百万行记录的范例:  

pt-fifo-split --lines 1000000 hugefile.txt while [ -e /tmp/pt-fifo-split ]; do cat /tmp/pt-fifo-split; done

范例 2 :一个每次读取一百万行,指定 fifo 文件为 /tmp/my-fifo ,并使用 load data 命令导入到 mysql 中:  

pt-fifo-split infile.txt --fifo /tmp/my-fifo --lines 1000000 while [ -e /tmp/my-fifo ]; do    mysql -e "set foreign_key_checks=0; set sql_log_bin=0; set uniq ue_checks=0; load data local infile '/tmp/my-fifo' into table load_t est fields terminated by '\t' lines terminated by '\n' (col1, col2);"    sleep 1; done

 

3.  pt-summary

功能介绍:友好地收集和显示系统信息概况,此工具并不是一个调优或者诊断工具,这个工具会产生一个很容易进行比较和发送邮件的报告。  

用法介绍:  

pt-summary

原理:此工具会运行和多命令去收集系统状态和配置信息,先保存到临时目录的文件中去,然后运行一些 unix 命令对这些结果做格式化,最好是用 root 用户或者有权限的用户运行此命令。  

使用示例:  

范例 1 :查看本地系统信息概况  

pt-summary

 

4.  pt-stalk

功能介绍:出现问题的时候收集 mysql 的用于诊断的数据  

用法介绍:  

pt-stalk [OPTIONS] [-- MYSQL OPTIONS]

pt-stalk 等待触发条件触发,然后收集数据帮助错误诊断,它被设计成使用 root 权限运行的守护进程,因此你可以诊断那些你不能直接观察的间歇性问题。默认的诊断触发条件为 SHOW GLOBAL STATUS

也可以指定 processlist 为诊断触发条件   ,使用 --function 参数指定。  

使用示例:范例 1 :指定诊断触发条件为 status ,同时运行语句超过 20 的时候触发,收集的数据存放在 /tmp/test 目录下:  

pt-stalk  --function status --variable Threads_running --threshold 20

 --dest /tmp/test  -- -uroot -pzhang@123  -h192.168.3.135

范例 2 :指定诊断触发条件为 processlist ,超过 20 个状态为 statistics 触发,收集的数据存放在 /tmp/test 目录下:  

pt-stalk  --function processlist --variable State  --match statistics --t hreshold 20 --dest /tmp/test -- -uroot -pzhang@123  -h192.168.3.1

35

贴一下达到触发条件以后收集的信息:  

2012_06_04_17_31_49-df

2012_06_04_17_31_49-disk-space

2012_06_04_17_31_49-diskstats

2012_06_04_17_31_49-hostname

2012_06_04_17_31_49-innodbstatus1

2012_06_04_17_31_49-innodbstatus2

2012_06_04_17_31_49-interrupts

2012_06_04_17_31_49-log_error

2012_06_04_17_31_49-lsof

2012_06_04_17_31_49-meminfo

2012_06_04_17_31_49-mutex-status1

2012_06_04_17_31_49-mysqladmin

2012_06_04_17_31_49-netstat

2012_06_04_17_31_49-netstat_s

2012_06_04_17_31_49-opentables1

2012_06_04_17_31_49-opentables2

2012_06_04_17_31_49-output

2012_06_04_17_31_49-pmap

2012_06_04_17_31_49-processlist

2012_06_04_17_31_49-procstat

2012_06_04_17_31_49-procvmstat

2012_06_04_17_31_49-ps

2012_06_04_17_31_49-slabinfo

2012_06_04_17_31_49-sysctl

2012_06_04_17_31_49-top

2012_06_04_17_31_49-trigger

2012_06_04_17_31_49-variables

2012_06_04_17_31_49-vmstat

2012_06_04_17_31_49-vmstat-overall

 

( )   实用类工具  

1.   pt-archiver

功能介绍:将 mysql 数据库中表的记录归档到另外一个表或者文件,也可以直接进行记录的删除操作。  

用法介绍:  

pt-archiver [OPTION...] --source DSN --where WHERE

这个工具只是归档旧的数据,不会对线上数据的 OLTP 查询造成太大影响,你可以将数据插入另外一台服务器的其他表中,也可以写入到一个文件中,方便使用 load data infile 命令导入数据。另外你还可以用它来执行 delete 操作。这个工具默认的会删除源中的数据。使用的时候请注意。  

使用示例:  

范例 1 :将 192.168.3.135 上的 sanmao 库的 oss_log id 小于 100000 的记录转移到 192.168.3.92 上的 sanmao 库,并归档到 oss_log_archive_20120605.log 文件中 :

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root  --password=zhang@123 --dest h=192.168.3.92,D=sanmao,t=oss_log -

-file '/var/log/oss_log_archive_20120605.log' --where "id<=100000"  

--commit-each

范例 2 :将 192.168.3.135 上的 sanmao 库的 oss_log 小于 160000 的记录归档到 oss_log_archive_20120607.log 文件中 :

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root  --password=zhang@123 --file '/var/log/oss_log_archive_20120607.lo g' --where "id<=160000"  --commit-each

范例 3 :删除 192.168.3.135 上的 sanmao 库的 oss_log 表中 id 小于

167050 的记录:  

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root

 --password=zhang@123 --purge --where 'id<=167050'

注意:如果是字符集是 utf8 的话,需要在 my.cnf 中的 [client] 下面添加 default-character-set = utf8 ,否则导出的文件内容中文会乱码。  

 

2.   pt-find

功能介绍:查找 mysql 表并执行指定的命令,和 gnu find 命令类似。  

用法介绍:  

pt-find [OPTION...] [DATABASE...]

默认动作是打印数据库名和表名  

使用示例:  

范例 1 :查找 192.168.3.135 1 天以前创建的 InnoDB 的表  , 并打印。  

pt-find --ctime +1  --host=192.168.3.135 --engine InnoDB --user=roo t --password=zhang@123

范例 2 :查找 192.168.3.135 1 天以前更改过的数据库名字匹配 %hostsops% 的并且引擎为 MYISAM 的表,并将表的引擎更改为

InnoDB 引擎。  

pt-find --mtime +1 --dblike hostsops --engine MyISAM --host=192.1 68.3.135 --user=root --password=zhang@123  --exec "ALTER TABLE  %D.%N ENGINE=InnoDB"

范例 3 :查找 192.168.3.135 aaa 库和 zhang 库中的空表,并删除。  

pt-find --empty aaa zhang --host=192.168.3.135 --user=root --passw ord=zhang@123  --exec-plus "DROP TABLE %s"

范例 4 :查找 192.168.3.135 中超过 100M 的表:  

pt-find --tablesize +100M --host=192.168.3.135 --user=root --passwo rd=zhang@123

 

3.   pt-kill

功能介绍:  

Kill 掉符合指定条件 mysql 语句  

用法介绍:  

pt-kill [OPTIONS]

假如没有指定文件的话 pt-kill 连接到 mysql 并通过 SHOW PROCESSLIST 找到指定的语句,反之 pt-kill 从包含 SHOW PROCESSLIST 结果的文件中读取 mysql 语句  

使用示例:范例 1 :查找 192.168.3.135 服务器运行时间超过 60s 的语句,并打印  

pt-kill --busy-time 60 --print --host=192.168.3.135 --user=root --pass word=zhang@123

范例 2 :查找 192.168.3.135 服务器运行时间超过 60s 的语句,并 kill

pt-kill --busy-time 60 --kill --host=192.168.3.135 --user=root --passw ord=zhang@123

范例 3 :从 proccesslist 文件中查找执行时间超过 60s 的语句  

mysql -uroot -pzhang@123 -h192.168.3.135 -e "show processlist" >  processlist.txt pt-kill --test-matching processlist.txt --busy-time 60 --print   

 

 





About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改时间:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端 扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2651466/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2651466/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值