---
title: pt-table-checksum简介
description: "pt-table-checksum是Percona Toolkit工具集中的一种工具，是Percona Toolkit的子命令，它是一个在线验证主从数据一致性的工具。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0028.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0028.html
indexId: 63abcd9ac7f297441ab71a5fb1f24da3619faf0e0eb5048b82692a9a8fc2996080
---
# pt-table-checksum简介

pt-table-checksum是Percona Toolkit工具集中的一种工具，是Percona Toolkit的子命令，它是一个在线验证主从数据一致性的工具。

pt-table-checksum应用场景：

- 数据迁移前后，进行数据一致性检查。

- 当主从复制出现问题，待修复完成后，对主从数据进行一致性检查。

- 在从库不是只读的情况下，客户端误把从库当主库进行写操作后会产生“脏数据”，该工具可定位产生了脏数据的表。

pt-table-checksum原理：

pt-table-checksum通过在主库上执行检查语句，在线检查MySQL复制的一致性，生成replace语句，然后传递到从库，再通过update更新master_src的值。默认情况下，pt-table-checksum会自动发现并连接所有从库，通过检测从库的this_src和master_src的值从而判断主从数据是否一致。pt-table-checksum有两种checksum值的计算。

- 单行数据checksum值的计算：
  pt-table-checksum工具先检查表的结构，并且获取表中每一列的数据类型，把所有数据类型都转化为字符串，使用concat_ws()函数进行连接，然后使用CRC32计算出该行的checksum值。


- 数据块checksum值的计算：
  如果一行一行去计算checksum值，再去和从库比较，效率会很低。pt-table-checksum可以利用表中的索引，将表的数据split成一个个chunk，计算的时候也是以chunk为单位。pt-table-checksum引入了聚合函数BIT_XOR()。它的功能可以理解为将这个chunk内的所有行数据拼接起来，再计算CRC32的值，就得到了这个chunk的checksum值。当pt-table-checksum工具在计算主库上某一个chunk的checksum值时，主库可能还在更新，为了保证checksum是同一份数据，需要对该chunk加for update锁。
