percona-toolkit使用教程之复制类工具

转载 2015年11月20日 10:40:20

转载:http://blog.chinaunix.net/uid-20639775-id-3229211.html

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 -h192.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 -h192.168.3.92

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

pt-heartbeat -D test --check --user=root --password=zhang@123 -h192.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-time 10m --host=192.168.3.92

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

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

pt-slave-delay --user=root --password=zhang@123 --delay 1m --interval 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 master position mysql-bin.000032/4392054

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

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

2012-05-20T16:35:35 slave stopped at master position mysql-bin.000032/4407264

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

2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:05 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.135

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, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT 'test', 'zhang', '1', NULL, NULL, NULL, COUNT(*) AS cnt, COALESCE(LOWER(CONV(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 = 'zhang' AND chunk = '1'

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

l  使用示例:

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

pt-table-checksum  --nocheck-replication-filters --databases=test --replicate=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不为0,那么就是这两个表不同步了。

 

范例2:比较test数据库同步是否一致,结果只显示数据不一致的表(添加--replicate-check-only参数即可,这个值查看checksums数据不会重新对表进行比较,因此需要先运行上面的比较语句之后再运行这个语句,否则显示不了最新的变化。)。

pt-table-checksum  --nocheck-replication-filters --databases=test --replicate=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_BOUNDARY 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.168.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=zhang@123  h=192.168.3.92 --database test

范例3:只同步指定的表

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

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

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

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

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

percona-toolkit常用工具整理(未完待续)

pt-online-schema-changept-online-schema-change为在alter操作更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操作,注意执行这个...
  • lijingkuan
  • lijingkuan
  • 2016年02月25日 11:22
  • 609

ubuntu16.04 percona-toolkit安装

一、官网下载       下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/   二、安装 2.1、下...
  • Just_shunjian
  • Just_shunjian
  • 2017年11月29日 11:58
  • 94

percona-toolkit工具包的使用教程之配置类工具

1. pt-config-diff l  功能介绍: 比较mysql配置文件和服务器参数 l  用法介绍: pt-config-diff [OPTION...] CONFIG CONF...
  • lirenkai2000
  • lirenkai2000
  • 2014年06月08日 12:24
  • 361

mysql工具percona-toolkit之安装

MySQL数据库是轻量级、开源数据库的佼佼者,其功能和管理,健壮性与Oracle相比还是有相当的差距。因此有很多功能强大第三方的衍生产品, 如percona-toolkit,XtraBackup等等。...
  • jc_benben
  • jc_benben
  • 2016年10月19日 10:47
  • 1062

percona-toolkit工具包的使用教程之性能类工具

1.  pt-index-usage l  功能介绍: 从log文件中读取插叙语句,并用explain分析他们是如何利用索引。完成分析之后会生成一份关于索引没有被查询使用过的报告。 l  用法介...
  • lirenkai2000
  • lirenkai2000
  • 2014年06月08日 12:23
  • 317

percona-toolkit工具包的使用教程

本文收集了percona-toolkit工具包中比较常用的工具集,写成教程,方便自己使用也共享出来方便大家学习。由于本人英文水平实在是不怎么样,加上最近比较忙所以教程写得匆忙,因此学习过程中难免会有不...
  • m18580239676
  • m18580239676
  • 2015年09月18日 17:19
  • 171

percona-toolkit工具之pt-table-checksum使用

cd /opt/percona-toolkit编译目录/bin pt-table-checksum  --nocheck-replication-filters --replicate=test.ch...
  • laiyijian
  • laiyijian
  • 2017年05月17日 17:50
  • 126

pt-query-digest查询日志分析工具 - percona-toolkit使用教程之系统类工具

1. 工具简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过t...
  • jizhunboss
  • jizhunboss
  • 2016年11月17日 09:29
  • 167

percona-toolkit工具集pt-kill使用举例

percona-toolkit-2.2.10使用举例 以pt-kill为例 --help,可以看到帮助信息 需要注意的事情: --victims all需要有,否则只会处理一个连接(最早连上数据...
  • jiangshouzhuang
  • jiangshouzhuang
  • 2015年02月11日 23:12
  • 1209

percona-toolkit工具的安装

Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务,主要包括: 1、验证主节点和复制数据的一致性 2、有效的对记录行进行归档 3、找出重复的索引 4、总结 MyS...
  • Stubborn_Cow
  • Stubborn_Cow
  • 2015年08月22日 10:49
  • 890
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:percona-toolkit使用教程之复制类工具
举报原因:
原因补充:

(最多只允许输入30个字)