1:下载工具包
登录网站下载相应的工具包
2:安装
(1)yum安装:
sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum list | grep percona-toolkit

结果集显示以下证明安装成功:

percona-toolkit.noarch 3.0.0-rc percona-release-noarch

然后进行安装

sudo yum install percona-toolkit

(2)解压安装包:

[root@localhost home]# cd toolkit/
[root@localhost toolkit]# ls
percona-toolkit-2.2.19.tar.gz
[root@localhost toolkit]# tar -xvf percona-toolkit.tar.gz

至此来说已经安装了percona 的toolKit工具包,下面主要测一下pt-table-checksum校验与pt-table-sync,前者主要用于数据的校验,验证主从是否一致,后者主要用来修复数据,两者一般情况结合起来用可以修复数据不一致的问题。

pt-table-checksum是percona公司提供的一款验证主从数据一致性的工具,我们指向主库,判断从库的结果集会反馈给我们,当有捕获到不一致问题的时候,就会返回一个非0的结果。但是他只能查找数据的不一致,如果要修复数据问题就要使用pt-table-sync。
pt-table-checksum在运行的时候是基于statement复制格式的,如果我们是ROW格式,需要在执行的时候加上--no-check-binlog-format参数。
3:pt-table-checksum的实践,装完以后我们就可以直接使用了,我这是使用的是第二种方式
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format h=172.16.16.35,u=root,p=123456,P=3306
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
06-07T10:55:49 0 0 1 1 0 1.331 MAXIANGQIAN.MAXIANGQIAN
06-07T10:55:54 0 0 1 1 0 5.524 maxiangqian.test
06-07T10:55:56 0 0 4 1 0 1.208 maxiangqian.test01
06-07T10:55:57 0 0 0 1 0 1.164 mysql.columns_priv
06-07T10:55:58 0 0 5 1 0 1.216 mysql.db
06-07T10:55:59 0 0 2 1 0 1.176 mysql.engine_cost
06-07T10:56:00 0 0 0 1 0 1.178 mysql.event
06-07T10:56:01 0 0 0 1 0 1.160 mysql.func
06-07T10:56:03 0 0 1 1 0 1.154 mysql.gtid_executed
06-07T10:56:08 0 0 40 4 0 5.015 mysql.help_category
06-07T10:56:13 0 0 679 5 0 5.806 mysql.help_keyword
06-07T10:56:18 0 0 1334 4 0 4.572 mysql.help_relation
06-07T10:56:19 0 0 635 1 0 1.169 mysql.help_topic
06-07T10:56:20 0 0 0 1 0 1.163 mysql.ndb_binlog_index
06-07T10:56:22 0 0 0 1 0 1.157 mysql.plugin
06-07T10:56:23 0 1 48 1 0 1.236 mysql.proc
06-07T10:56:24 0 0 0 1 0 1.197 mysql.procs_priv
06-07T10:56:25 0 0 1 1 0 1.235 mysql.proxies_priv
06-07T10:56:26 0 0 6 1 0 1.188 mysql.server_cost
06-07T10:56:28 0 0 0 1 0 1.154 mysql.servers
06-07T10:56:34 0 0 1 1 0 6.184 mysql.tables_priv
06-07T10:56:35 0 0 0 1 0 1.198 mysql.time_zone
06-07T10:56:36 0 0 0 1 0 1.121 mysql.time_zone_leap_second
06-07T10:56:37 0 0 0 1 0 1.148 mysql.time_zone_name
06-07T10:56:38 0 0 0 1 0 1.147 mysql.time_zone_transition
06-07T10:56:40 0 0 0 1 0 1.138 mysql.time_zone_transition_type
06-07T10:56:41 0 0 8 1 0 1.336 mysql.user
06-07T10:56:42 0 0 0 1 0 1.164 open_api.ma
06-07T10:57:01 0 0 1000000 13 0 18.707 sbtest.sbtest
06-07T10:57:02 0 0 6 1 0 1.263 sys.sys_config

我们也可以单独检查某一个库,这样来缩小检查范围:

[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306

得到的结果如上,看一下描述:

TS :完成检查的时间。 ERRORS :检查时候发生错误和警告的数量。 DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。 ROWS :表的行数。 CHUNKS :被划分到表中的块的数目。 SKIPPED :由于错误或警告或过大,则跳过块的数目。 TIME :执行的时间。 TABLE :被检查的表名。
然后看一下这个主要的参数:
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。 --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。 --databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开 h=127.0.0.1 :
Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口

通过指定--replicate=rep_test.checksums 参数,会自动生成一个数据库.把检查信息都写到了checksums表中。

进入SLAVE相应的库中查看checksums表的信息,可以通过以下语句查看不一致的信息:
mysql> select * from checksums where this_cnt<>master_cnt;

通过上面的 this_crc <> master_crc 更能清楚的看出他们的不一致了,通过chunk知道是这个张表的哪个块上的记录出现不一致。

4:检测数据不一致的情况使用pt-table-sync进行修复
我们看一下上一节我们通过以下的语句检测到有数据是不一致的:
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
06-07T11:13:18 0 0 1 1 0 1.220 MAXIANGQIAN.MAXIANGQIAN
06-07T11:13:19 0 1 1 1 0 1.135 maxiangqian.test
06-07T11:13:21 0 0 4 1 0 1.197 maxiangqian.test01

恢复不一致数据:

[root@localhost bin]# clear
[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
06-07T11:18:09 0 0 1 1 0 1.172 MAXIANGQIAN.MAXIANGQIAN
06-07T11:18:10 0 0 1 1 0 1.144 maxiangqian.test
06-07T11:18:11 0 0 4 1 0 1.282 maxiangqian.test01

本身来说test这张表少了一行数据,执行以后主体和副本的数据将会一致:

接下来我们再看一下看一下pt-table-sync的一些使用案例:
(1)将host1上的数据同步到host2,只同步db.tbl表
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print

(2)将host1 上的所有数据同步到host2和host3

pt-table-sync --execute host1 host2 host3
[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 h=172.16.16.35,P=3307,u=root,p=123456 --no-check-slave --print

(3)确保slave1上的所有数据和主库是同步的

pt-table-sync --execute --sync-to-master slave1
[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print

这个要求所检查的表是必须有主键或者说唯一索引的。我们也可以按照下面指定单库的单表

[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,D=maxiangqian,t=test01,u=root,p=123456 --no-check-slave --print

(4)按照检查生成的rep_test.checksums恢复所有的从库

pt-table-sync --execute --replicate test.checksum master1

也就是下面的例子:

[root@localhost bin]# ./pt-table-sync --execute --replicate rep_test.checksums h=172.16.16.35,P=3306,u=root,p=123456

(5)只修复slave1的数据

/pt-table-sync --execute --replicate rep_test.checksums --sync-to-master slave1

(6)双主模式master2修复自身数据:

pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl

由于双主模式有很多问题,一个修改可能会传给另外的数据库,所以说我们千万不能在双主的模式下执行以下的操作:

pt-table-sync --execute h=master1,D=db,t=tbl master2

pt-table-checksum校验与pt-table-sync修复数据的更多相关文章

  1. NXP ARM Vector Table CheckSum

    Signature Creator for NXP Cortex-M Devices Algorithm for creating the checksum The reserved Cortex-M ...

  2. Nodes “-1” are listed in ADOP_VALID_NODES table but not in FND_NODES table

    While trying to apply patches to upgrade to 12.2.4, adop failed due to the below errors. Validating ...

  3. Truncate table、Delete与Drop table的区别

    Truncate table.Delete与Drop table的区别 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNC ...

  4. table完美css样式,table的基本样式,table样式

    table完美css样式,table的基本样式,table样式 >>>>>>>>>>>>>>>>> ...

  5. css实现鼠标移入table时出现滚动条且table内容不移位

    一般是这样: 表格的标题和内容分别由一个table组成,其中表格内容的table由一个class="table-body"的div包裹.css如下 .tContainer .tab ...

  6. 14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE

    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE 回收操作系统磁盘空间当truncate 一个InnoDB ...

  7. ALTER TABLE SWITCH' statement failed. The table x' is partitioned while index 'x' is not partitioned.

    1.L_Monitoring有这么些字段,ID,Collecttime,PlateType,PlateNO以及其他一些这段.建立这个表的时候是个非分区表,其中ID是主键,并在Collecttime,P ...

  8. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -

    mysql -A不预读数据库信息(use dbname 更快)—Reading table information for completion of table and column names Y ...

  9. 解决:Reading table information for completion of table and column names

    mysql -A不预读数据库信息(use dbname 更快)—Reading table information for completion of table and column names Y ...

  10. Reading table information for completion of table and column names

    mysql> use ad_detail_page;Reading table information for completion of table and column namesYou c ...

随机推荐

  1. 秒懂 this(带你撸平this)

    本文讲述只针对浏览器环境. 一:全局执行 console.log(this); // Window 可以看出在全局作用域中 this 指向当前的全局对象 Window. 二:函数中执行 1. 非严格模 ...

  2. ES6学习笔记(二)—— 通过ES6 Module看import和require区别

    前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...

  3. Java反序列化漏洞实现

    一.说明 以前去面试被问反序列化的原理只是笼统地答在参数中注入一些代码当其反序列化时被执行,其实“一些代码”是什么代码“反序列化”时为什么就会被执行并不懂:反来在运营商做乙方经常会因为java反反序列 ...

  4. RandomAccessFile多线程下载

    public class DownloadServer { ; private static String fileUrl = "https://dldir1.qq.com/qqtv/mac ...

  5. 网络编程,socket

    1.网络编程 网络: TCP/IP 彼此之间遵守协议和规范!之间才能产生通信! IP: 每个人都有自己的身份证号! 用来标识我们网络中每一台计算机! IP地址= 网络地址 +主机地址 网络地址 :标识 ...

  6. 【Cocos2d-html5】运动中速度效果

    在我们使用Action系统动作的时候,比如MoveTo,在进行运动的时候总是在规定的时间内进行匀速运动,有时候可能会想添加一些加速度的效果,cocos2d-html5就依然和cocos2dx一样为我们 ...

  7. ssl证书安装到iis服务器

    1.先购买ssl证书, 2.对付会先发一份邮件到你的邮箱,进行验证 3.再查看邮箱,会发现有了对应的证书文件. 附件会有一个压缩包,里面包含4份证书文件, 还有一个通配符的字符串. 4.下载之后, 先 ...

  8. Json转换工具

    import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterx ...

  9. angualr Material Icons

    首先需要项目引入 angualr meterial icons的资源库 图标资源链接 https://klarsys.github.io/angular-material-icons/ <md- ...

  10. noj电子老鼠走迷宫(深搜dfs)超时错误

    1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...