我已经使用 mysql 5.7 和 GTID 设置了主从复制。
GTID 应该比单独复制每个语句的旧方式更“安全”吗?
但是当使用 GTID 进行复制时,我可以通过检查来检查从站上的数据一致性SHOW SLAVE STATUS\G
吗?
还是我需要对每个表中的每一行进行校验和以确保所有内容都正确复制?
我已经使用 mysql 5.7 和 GTID 设置了主从复制。
GTID 应该比单独复制每个语句的旧方式更“安全”吗?
但是当使用 GTID 进行复制时,我可以通过检查来检查从站上的数据一致性SHOW SLAVE STATUS\G
吗?
还是我需要对每个表中的每一行进行校验和以确保所有内容都正确复制?
在我解决你的问题之前,一些术语问题......
GTID
唯一标识复制的每个事物。这是对以前的复制技术的改进——但主要是当您有多台机器并且需要从某种故障中恢复时。它有助于使事情自动化。bin_log_format
= STATEMENT 或 ROW 或 MIXED 是指从 Master 传输到 Slave 的内容。STATEMENT (SBR) 是老方法;ROW (RBR) 是新的方式。RBR“更好”的原因有很多。SHOW SLAVE STATUS
提供,除其他外,复制是否由于某些错误而停止。它报告陈旧性的粗略衡量标准 (Seconds_Behind_Master
),但不报告“一致性”(更改是否到达并正确应用)。您不需要对每一行进行校验和。你添加这样的东西会很笨拙。网络层(TCP/IP 等)进行校验和以“保证”交付并验证交付的内容。
如果你想做自己的一致性检查,我推荐 Percona 的
pt-table-checksum
. 它处理了许多对开始自己进行检查的人来说并不明显的最终情况。