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    任务和系统任务,这些任务包括:     

l     检查    master    和    slave    数据的一致性     

l     有效地对记录进行归档

l         查找重复的索引     

l     对服务器信息进行汇总     

l     分析来自日志和    tcpdump    的查询     

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

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

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

l     用法介绍:     

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

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

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

l     使用示例:     

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

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

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

--user=root

     

2.    pt-online-schema-change

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

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

l     用法介绍:     

pt-online-schema-change [OPTIONS] DSN

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

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

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

l     使用示例:范例    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

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

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

l     用法介绍:     

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

 

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

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

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

l     用法介绍:     

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

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

l     使用示例:查看指定    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

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

l     用法介绍:     

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

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

l     使用示例:只查看某个    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

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

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

l     用法介绍:     

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

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

l     使用示例:从满查询中的    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

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

l     用法介绍:     

pt-pmp [OPTIONS] [FILES]

l     使用示例:     

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

3.    pt-visual-explain

l     功能介绍:     

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

l     用法介绍:     

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

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

l     使用示例:查看包含    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

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

l     用法介绍:     

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

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

l     使用示例:范例    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

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

l     用法介绍:     

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

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

l     使用示例:范例    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

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

l     用法介绍:     

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

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

l     使用示例:     

范例    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

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

l     用法介绍:     

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

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

l     使用示例:范例    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

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

l     用法介绍:     

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

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

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

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

/pt-fk-error-logger line 2045

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

 

3.    pt-mext

l     功能介绍:     

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

l     用法介绍:     

pt-mext [OPTIONS] -- COMMAND

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

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

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

 

4.    pt-query-digest

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

l     用法介绍:     

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

解析和分析    mysql    日志文件     

l     使用示例:范例    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

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

l     用法介绍:     

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

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

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

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

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

 

(     五     )           复制类工具      

1.       pt-heartbeat

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

l     用法介绍:     

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

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

l     用法介绍:     

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

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

l     使用示例:范例    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

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

l     用法介绍:     

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

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

l     使用示例:     

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

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

4.    pt-slave-restart

l     功能介绍:     

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

l     用法介绍:     

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

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

l     使用示例:     

范例    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

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

l     用法介绍:     

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

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

l     用法介绍:     

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

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

l     使用示例:     

范例    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

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

l     用法介绍:     

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

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

l     使用示例:     

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

pt-diskstats

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

pt-diskstats --devices-regex sda2

 

2.    pt-fifo-split

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

l     用法介绍:     

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/       。      

 

l     使用示例:范例    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

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

l     用法介绍:     

pt-summary

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

l     使用示例:     

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

pt-summary

 

4.    pt-stalk

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

l     用法介绍:     

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

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

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

l     使用示例:范例    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

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

l     用法介绍:     

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

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

l     使用示例:     

范例    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

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

l     用法介绍:     

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

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

l     使用示例:     

范例    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

l     功能介绍:     

Kill    掉符合指定条件    mysql    语句     

l     用法介绍:     

pt-kill [OPTIONS]

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

l     使用示例:范例    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   

 


上一篇:【MySQL】通过Percona XtraBackup实现数据库单表恢复


下一篇:MySQL 主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理