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
→ 主从数据不一致 ❌
No comments to display
No comments to display