Skip to main content

pt-table-checksum


Installation

apt-get -y install percona-toolkit

Priviledges

目标库

GRANT SELECT ON foo.* TO 'pttable'@'%';

校验结果库

GRANT CREATE, INSERT, UPDATE, DELETE ON percona.* TO 'pttable'@'%';

其它权限

GRANT PROCESS, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'pttable'@'%';

GRANT PROCESS ON *.*

允许用户查看 MySQL 服务器当前正在运行的线程和会话信息,类似 SHOW PROCESSLIST。

在 pt-table-checksum 中的作用:

  • 工具会检查 复制线程状态,比如确认从库 SQL/IO 线程是否在运行;
  • 也可能用来检测当前是否有会话占用资源,避免校验任务和大事务冲突。

GRANT REPLICATION CLIENT ON *.*

允许执行和复制相关的 查询命令,比如:

  • SHOW MASTER STATUS;
  • SHOW SLAVE STATUS;
  • SHOW BINARY LOGS;

在 pt-table-checksum 中的作用,工具需要确认:

  • 当前主库的 binlog 文件和位置;
  • 从库的复制位点,确保 checksum 表能正常复制。

GRANT REPLICATION SLAVE ON *.*

这个权限通常授予 从库账号,允许其向主库请求 binlog 事件(复制)。 虽然 pt-table-checksum 并不直接“拉取 binlog”,但在某些环境下,它会检查复制是否正常,需要具备这个权限。


Examples

Specify DB and Table

pt-table-checksum \
  --user=pttable \
  --password='foo' \
  --host=127.0.0.1 \
  --databases=foo \
  --tables=foo \
  --replicate=percona.checksums \
  --create-replicate-table \
  --nocheck-replication-filters \
  --no-check-binlog-format

参数说明

  • --user / --password / --host → 数据库连接账号、密码、主库地址。
  • --databases=trim_domain → 只检测 trim_domain 库。
  • --tables=nas_domain → 只检测 nas_domain 表。
  • --replicate=percona.checksums → 校验结果写入 percona.checksums 表。
  • --create-replicate-table → 如果 percona.checksums 表不存在则自动创建。
  • --nocheck-replication-filters → 避免复制过滤规则导致误报。
  • --no-check-binlog-format → 不强制检查 binlog 格式(ROW/STATEMENT/MIXED),避免报错。

执行结果查看

跑完后登录数据库执行:

SELECT db, tbl, SUM(this_cnt) AS total_rows,
       COUNT(*) AS chunks,
       SUM(this_crc != master_crc OR this_cnt != master_cnt) AS diff_chunks
FROM percona.checksums
WHERE db='trim_domain' AND tbl='nas_domain'
GROUP BY db, tbl;
  • diff_chunks = 0 → 主从一致 ✅
  • diff_chunks > 0 → 主从数据不一致 ❌