Hi Percona community,
I’m looking for guidance on the safest operational pattern for using `pt-table-checksum` in a MySQL master-master / source-source replication setup.
Environment summary:
- Database: MySQL Enterprise Edition bundled as part of the vendor application
- Topology: two-node UA MySQL pair
- node A: server11 (hosted site1)
- node B: server21 (hosted site2)
- Replication style: source-source / master-master replication
- In practice, one node is considered primary in our application inventory, and the other is redundant/secondary, but MySQL replication exists between both nodes.
- We are trying to use Percona Toolkit to detect table drift between these two nodes.
During validation, `pt-table-checksum` did not run with default safety checks because of the current UA MySQL configuration.
First, it failed due to ROW binlog format on the peer:
`Replica has binlog_format ROW which could cause pt-table-checksum to break replication.
If you understand the risks, specify --no-check-binlog-format to disable this check.
Exit status: 255`
After adding `–no-check-binlog-format` in non-prod testing, the next run failed due to replication skip/filter-related configuration:
`Replication filters are set on these hosts:
replica_skip_errors = 1032,1053,1062,1160
Please read the --check-replication-filters documentation to learn how to solve this problem.
Exit status: 255`
My questions:
1. For a master-master / source-source topology like this, what is the recommended `pt-table-checksum` execution model?
Should it be run only from one chosen source node, allowing checksum statements to replicate to the peer?
Or is it valid/recommended to run it from both nodes, one direction at a time, if both nodes can act as sources?
2. If running from both nodes is valid, what precautions should be used?
For example:
- different schedules so runs never overlap
- separate replicate tables
- explicit DSNs instead of processlist discovery
- locking / PID file
- bounded runtime
- specific table/database scope
3. Given the ROW binlog format warning, is `–no-check-binlog-format` acceptable in this kind of environment, or should we avoid `pt-table-checksum` unless statement-based behavior can be guaranteed?
4. Given `replica_skip_errors = 1032,1053,1062,1160`, is `–no-check-replication-filters` appropriate after documenting the risk, or does that make checksum results unreliable enough that we should not proceed?
5. Are there best practices for using `pt-table-checksum` with vendor-managed MySQL stacks where some MySQL settings cannot easily be changed?
Our current thinking is:
- Start with one intentional source node only, not cron on both nodes by default.
- Keep Percona safety checks enabled unless we can clearly justify overrides.
- Scope the tables/databases explicitly after non-prod canary testing.
- Capture non-prod evidence showing runtime, lag behavior, exit status, and drift/no-drift output before considering production scheduling.
I’d appreciate any expert guidance on whether this is the right approach, especially for master-master/source-source replication.
Regards,
Gokul