percona-toolkit 基本使用

运行环境:

Master:10.168.1.216
Slave:10.168.1.217

一、pt-heartbeat

监控mysql复制延迟

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

pt-heartbeat -D ismarthome --update --user=root --password=123456 -h10.168.1.216 --create-table –daemonize

1.2、监控复制在slave上的落后程度(会一直监控)

pt-heartbeat -D ismarthome --monitor --user=root --password=daqi-123456 -h10.168.1.217

1.3、监控复制在slave上的落后程度(监控一次退出)

pt-heartbeat -D ismarthome --check --user=root --password=daqi-123456 -h10.168.1.217

二、 pt-slave-find

查找和打印mysql所有从服务器复制层级关系

2.1、查找主服务器的mysql有所有从的层级关系

pt-slave-find --user=root --password=123456--host=10.168.1.216

三、pt-slave-restart

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

3.1、监视从,跳过1个错误

pt-slave-restart --user=root --password=daqi-123456 --host=10.168.1.217 --skip-count=1

3.2、监视从,跳过错误代码为1062的错误

pt-slave-restart --user=root --password=daqi-123456 --host=10.168.1.217 --error-numbers=1062

四、pt-table-checksum

检查数据是否一致(在主库执行)

4.1、比较test数据库同步是否一致,结果显示所有的表

pt-table-checksum  --nocheck-replication-filters --databases=testDb --replicate=testDb.checksums --create-replicate-table  --host=10.168.1.216  --port 3306  -uroot -p123456

参数说明:第一次运行的时候需要添加–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 :不检查复制过滤器,建议启用。后面可以用–databases来指定需要检查的数据库。
  • –no-check-binlog-format :不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
  • –replicate-check-only :只显示不同步的信息。(注意:要谨慎使用,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示。)

  • –replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
  • –databases= :指定需要被检查的数据库,多个则用逗号隔开。
  • –tables= :指定需要被检查的表,多个用逗号隔开
  • h=127.0.0.1 :Master的地址
  • u=root :用户名
  • p=123456 :密码
  • P=3306 :端口

运行结果行显示的结果参数说明:

  • TS :完成检查的时间。
  • ERRORS :检查时候发生错误和警告的数量。
  • DIFFS :0表示一致,1表示不一致。当指定–no– – replicate-check时,会一直为0,当指定–replicate-check-only会显示不同的信息。
  • ROWS :表的行数。
  • CHUNKS :被划分到表中的块的数目。
  • SKIPPED :由于错误或警告或过大,则跳过块的数目。
  • TIME :执行的时间。
  • TABLE :被检查的表名。

备注:

(pt-table-checksum 其工作原理是通过计算每个表的散列值 并将计算过程在服务器上重放 从而拿到主从各自的散列值做比较,但是pt-table-checksum 不是直接计算整个表的散列值,而是分块计算避免服务器长时间延时 因此在计算散列过程重放时是基与statement 不能基于row)

五、pt-table-sync

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

  • –print :打印,但不执行命令。
  • –execute :执行命令。

5.1、同步Master(10.168.1.216)上a表数据到Slave(10.168.1.217),在执行之前可以用–execute参数换成–print来查看会变更什么东西,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址

查看:pt-table-sync –print –user=root –password=123456 h=10.168.1.216,D=testDb,t=aaa h=192.168.3.92

同步:pt-table-sync –execute –user=root –password=123456 h=10.168.1.216,D=testDb,t=aaa h=192.168.3.92

5.2、同步Master(10.168.1.216)上数据到Slave(10.168.1.217)

pt-table-sync --execute --sync-to-master --user=root --password=123456  h=10.168.1.217 --database testDb

5.3、只同步指定的a表

pt-table-sync --execute --sync-to-master --user=root --password=123456  h=10.168.1.217,D=testDb,t=a

5.4、根据pt-table-checksum的结果进行数据同步

pt-table-sync --execute --replicate testDb.checksums --user=root --password=123456 h=10.168.1.216

5.5、根据pt-table-checksum使从的数据和主的数据一致

pt-table-sync --execute --replicate test.checksums --user=root --password=123456  --sync-to-master h=10.168.1.217,D=testDb,t=a
发布于:2019-11-02 00:18:47