1. pt-heartbeat

用于监控主从延迟的工具

1.1 pt-heartbeat 原理

  1. 主库创建一张heartbeat表,表中有个时间戳字段。主库上pt-heartbeat的update线程会在指定时间间隔更新时间戳。
  2. 从库上的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 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
);
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 /tmp/mysql3306.sock --database sbtest --update --create-table --daemonize

2)主库利用sysbench模拟数据操作

sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-socket=/tmp/mysql3306.sock \
--mysql-user=root \
--mysql-password=mysql \
--mysql-db=sbtest \
--db-driver=mysql \
--tables=10 \
--table-size=500000 \
--report-interval=10 \
--threads=128 \
--time=120 \
prepare|run|cleanup prepare:准备数据,
run:执行压测,
cleanup:清除数据

3)从库进行监控


pt-heartbeat -S /tmp/mysql3306.sock --master-server-id=1003306 --monitor --database sbtest
1.00s [ 0.02s, 0.00s, 0.00s ]
1.00s [ 0.03s, 0.01s, 0.00s ]
0.86s [ 0.05s, 0.01s, 0.00s ]
0.86s [ 0.06s, 0.01s, 0.00s ]
0.96s [ 0.08s, 0.02s, 0.01s ]
1.00s [ 0.09s, 0.02s, 0.01s ]
0.88s [ 0.11s, 0.02s, 0.01s ]
0.00s [ 0.11s, 0.02s, 0.01s ]
1.01s [ 0.13s, 0.03s, 0.01s ]
0.00s [ 0.13s, 0.03s, 0.01s ]
0.00s [ 0.13s, 0.03s, 0.01s ]
... 结果表示有延时1s左右,中括号中的数据分别表示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_filerelay_log_pos,以及last_errno。你可以使用--verbose选项添加更多信息,也可以使用--quiet选项阻止所有输出。

SLEEP

pt-slave-restart检查slave的过程中智能地sleep。当前的sleep时间是变化的。

  • 初始sleep时间通过--sleep选项给出。
  • 如果检测发现错误,它对半之前的sleep时间。
  • 如果检测到没有错误,它倍增之前的sleep时间。
  • 通过--min-sleep--max-sleep参数限定sleep时间的下界和上界。
  • 一旦检测到错误,pt-slave-restart假定接下来很可能发生另一个错误,因此它采用当前的sleep时间或者初始sleep时间,取决于哪个值更小。

注意:

从Percona Toolkit 2.2.8版本起,pt-slave-restart开始支持由MySQL 5.6.5版本引入的GTID复制。重点牢记:

当采用多线程复制(slave_parallel_workers > 0)时,pt-slave-restart不能跳过事务。pt-slave-restart不能确定GTID事件是哪个特定slave线程执行失败的事务。

默认行为是跳过来自master的下一个事务。写可以来自不同的服务器,每个服务器都有它自己的UUID。参考–master-uuid选项。

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: Yes
Slave_SQL_Running: No
...
Last_SQL_Errno: 1062
Last_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跳过指定错误
pt-slave-restart --error-numbers=1062
2018-09-19T15:24:02 mysqldb2-relay-bin.000019 1088 1062 #6. 在slave上查看复制状态
···
Slave_IO_Running: Yes
Slave_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 实战

pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=192.168.56.100,u=wanbin,p=mysql,P=3306

Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
09-19T15:58:29 0 1 2 0 1 0 0.086 test.z1 #解释:
`TS` :完成检查的时间。
`ERRORS` :检查时候发生错误和警告的数量。
`DIFFS`:0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
`ROWS` :表的行数。
`CHUNKS` :被划分到表中的块的数目。
`SKIPPED` :由于错误或警告或过大,则跳过块的数目。
`TIME` :执行的时间。
`TABLE` :被检查的表名。 pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --replicate-check-only h=192.168.56.100,u=wanbin,p=mysql,P=3306 Checking if all tables can be checksummed ...
Starting checksum ...
Differences on mysqldb2
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
test.z1 1 -1 1 【注意】:
1)根据测试,需要一个即能登录主库,也能登录从库的账号;
2)只能指定一个host,必须为主库的IP;
3)在检查时会向表加S锁;
4)运行之前需要从库的同步IO和SQL进程是YES状态。

4. pt-table-sync

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修复命令

pt-table-sync --replicate=test.checksums h=192.168.56.100,u=wanbin,p=mysql,P=3306 h=192.168.56.200,u=wanbin,p=mysql,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=192.168.56.100,p=...,u=wanbin dst_db:test dst_tbl:z1 dst_dsn:P=3306,h=mysqldb2,p=...,u=wanbin lock:1 transaction:1 changing_src:test.checksums replicate:test.checksums bidirectional:0 pid:4374 user:root host:mysqldb1*/;

#execute修复命令
pt-table-sync --replicate=test.checksums h=192.168.56.100,u=wanbin,p=mysql,P=3306 h=192.168.56.200,u=wanbin,p=mysql,P=3306 --execute #再使用pt-table-checksum pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=192.168.56.100,u=wanbin,p=mysql,P=3306
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
09-19T16:11:50 0 0 2 0 1 0 0.134 test.z1 【注意】:要是表中没有唯一索引或则主键则会报错:
Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10591.

percona-toolkit工具使用介绍的更多相关文章

  1. Percona Toolkit工具集介绍

    部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...

  2. Percona Toolkit工具连接MySQL 8报错的解决方案

    使用Percona Toolkit的工具连接MySQL 8.x数据库时,会遇到类似"failed: Plugin caching_sha2_password could not be loa ...

  3. Percona Toolkit工具使用

    Percona Toolkit简称pt工具-PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等 下 ...

  4. Centos 安装Percona Toolkit工具集

    1.下载 下载地址:   https://www.percona.com/downloads/percona-toolkit/LATEST/ [root@bogon ~]# wget https:// ...

  5. Percona Toolkit mysql辅助利器

    1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在 ...

  6. RDS for MySQL 如何使用 Percona Toolkit

    Percona Toolkit 包含多种用于 MySQL 数据库管理的工具. 下面介绍常用的 pt-online-schema-change  和  pt-archiver 搭配 RDS MySQL ...

  7. 星型数据仓库olap工具kylin介绍

    星型数据仓库olap工具kylin介绍 数据仓库是目前企业级BI分析的重要平台,尤其在互联网公司,每天都会产生数以百G的日志,如何从这些日志中发现数据的规律很重要. 数据仓库是数据分析的重要工具, 每 ...

  8. linux下内存泄露检测工具Valgrind介绍

    目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...

  9. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

随机推荐

  1. JS高级学习历程-14

    昨天内容回顾 1. 面向对象的私有成员.静态成员 私有成员:在构造函数里边定义局部变量,就是私有成员. 静态成员:在js里边,函数就是对象,可以通过给函数对象声明成员方式声明静态成员. 2. 原型继承 ...

  2. [题解]luogu_P2155_BZOJ_2186沙拉公主的困惑

    题意求1~N!中与M!互质的数的个数, 首先证明gcd(a,b)=1时gcd(a-kb,b)=1 gcd(a,b)=1 gcd(a%b,b)=1 gcd(a-kb,b)=1 即a-kb与b互质 这样由 ...

  3. ubuntu 16.04 单用户____修改忘记密码

    1.开机按ESC,出现如下界面,选中如下选项 2.按回车键进入如下界面,然后选中有recovery mode的选项 3.按e进入如下界面,找到图中红色框的recovery nomodeset并将其删掉 ...

  4. python大战机器学习——人工神经网络

    人工神经网络是有一系列简单的单元相互紧密联系构成的,每个单元有一定数量的实数输入和唯一的实数输出.神经网络的一个重要的用途就是接受和处理传感器产生的复杂的输入并进行自适应性的学习,是一种模式匹配算法, ...

  5. jdk1.6与jdk1.7list集合排序区别与算法

    源码分析: 在Collections.sort中:    public static <T extends Comparable<? super T>> void sort(L ...

  6. 执行ng build --prod --aot命令报错

    D:\git\**\src\main\iui>ng build --prod --aotHash: 257ab60feca43633b6f7Time: 25358mschunk {0} poly ...

  7. JAVA基础之转换流和缓冲流

    个人理解: 在理解的字符流和字节流的区别后.要是想读取指定的编码格式的文件时,特别是不是默认的格式时,就需要转换流了,需要注意的是字符流是需要清除缓冲区的:当需要快速的进行读取时,则需要缓冲流.存在即 ...

  8. 1、http简介

    HTTP 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传 ...

  9. 洛谷 P2324 [SCOI2005]骑士精神

    题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...

  10. 【Python图像特征的音乐序列生成】如何标记照片的特征

    目前我能想到的办法是这样的: 1,提取照片中的实体特征,借用某个pre-trained model进行tag标记. 2,将特征组合起来,形成一个bag-of-word model,然后将这个向量作为输 ...