pt-table-checksum是主库扫描比对从库数据最主流可靠方式,支持分块校验、不锁全表、结果可追溯;需确保主从复制正常、log_slave_updates开启、专用账号权限完备、表有主键或唯一索引。

用 pt-table-checksum 在主库上扫描并比对从库数据,是当前最主流、最可靠的方式。它不锁全表、支持分块校验、结果可追溯,适合生产环境定期执行。
准备前提条件
确保以下几点已就绪,否则工具会报错或结果不可信:
- 主从复制状态正常:从库的
Slave_IO_Running和Slave_SQL_Running均为Yes - 从库开启
log_slave_updates = ON,否则 checksum 结果无法同步到从库参与比对 - 创建专用校验账号,具备
SELECT、PROCESS、SUPER、REPLICATION SLAVE权限,且能同时连接主库和从库 - 主从表必须有主键或唯一索引,否则工具会跳过或报错
执行一致性扫描
在主库服务器上运行命令,例如:
pt-table-checksum \ --host=192.168.1.100 \ --user=checksum_user \ --password=xxx \ --databases=myapp_db \ --replicate=percona.checksums \ --create-replicate-table \ --nocheck-replication-filters \ --recursion-method=processlist
关键说明:
-
--replicate指定结果存入哪张表(建议用percona.checksums,这是默认约定位置) -
--recursion-method=processlist让工具自动从主库的SHOW PROCESSLIST中识别从库(要求主从端口一致;若不一致,改用dsn方式并提前配置 DSN 表) -
--nocheck-replication-filters跳过复制过滤器检查(如replicate-ignore-db),避免误判,但需确认业务逻辑允许该跳过 - 首次运行加
--create-replicate-table,后续可省略
查看扫描结果
校验完成后,登录任意一台从库,执行查询定位不一致:
SELECT db, tbl, this_crc, master_crc, this_cnt, master_cnt FROM percona.checksums WHERE master_crc != this_crc OR master_cnt != this_cnt;
输出中每行代表一个异常表。注意:
-
DIGGS列为1表示该表存在差异(命令行输出中直接可见) -
this_crc是从库本地计算值,master_crc是主库传来的值,二者不等即数据内容不同 - 若只差一行计数(
cnt不同但crc相同),可能是空格、换行符或时间精度导致的伪差异,需人工抽样确认
快速修复不一致
确认问题后,用 pt-table-sync 生成或执行修复语句:
- 先预览将要执行的操作(安全第一):
pt-table-sync --replicate=percona.checksums --sync-to-master h=192.168.1.101 --print - 核对 SQL 无误后,真正同步从库:
pt-table-sync --replicate=percona.checksums --sync-to-master h=192.168.1.101 --execute -
务必提前备份目标表,
--execute会直接修改从库数据,不可逆 - 修复过程默认以主库为权威源,覆盖从库对应记录











