DORA Python Echo 示例详解:用三节点数据流验证端到端数据传递与校验
2026/9/18 22:55:00
pt-table-checksum可以在binlog格式为ROW的从库上运行,但需要正确配置。
pt-table-checksum通过在主库上执行校验和查询,并利用MySQL复制机制将结果传播到从库:
percona.checksums表binlog_format = STATEMENT用于校验和操作:-- 会话级设置(推荐)SETSESSIONbinlog_format='STATEMENT';-- 或者在my.cnf中为特定用户设置# 推荐:让工具自动处理格式转换pt-table-checksum\--replicate=percona.checksums\--no-check-binlog-format\--empty-replicate-table\--create-replicate-table\--recursion-method=hosts\h=主库IP,u=用户,p=密码# 或者显式设置pt-table-checksum\--set-vars"binlog_format=STATEMENT"\--replicate=percona.checksums\h=主库IP| 问题 | 原因 | 解决方案 |
|---|---|---|
| 复制错误 | ROW格式无法执行校验和语句 | 使用--set-vars或让工具自动转换 |
| 权限不足 | 需要SUPER权限改会话变量 | 授予用户SUPER权限 |
| 不一致结果 | 从库也在写入数据 | 使用--pause-file控制节奏 |
在主库执行(而不是直接在从库):
pt-table-checksum\--replicate=percona.checksums\--no-check-binlog-format\--max-lag=1s\--check-interval=2\--recursion-method=dsn=D=percona,t=dsns\h=master_host配置示例(my.cnf):
[mysqld] # 默认可以保持ROW格式 binlog_format = ROW # pt-table-checksum所需 binlog_rows_query_log_events = ON log_slave_updates = ON检查结果:
# 在从库上检查差异SELECT db, tbl, SUM(this_cnt)AS total_rows, COUNT(*)AS chunks FROM percona.checksums WHERE master_cnt<>this_cnt OR master_crc<>this_crc GROUP BY db, tbl;