pt-table-checksum 和基于行的复制

dgi*_*gig 5 mysql replication binlog percona-toolkit pt-table-checksum

我使用的设置是主从复制配置中的 MySQL 5.5,但我们必须使用“混合”复制(基于语句和行),因为我们使用需要它的应用程序,并且它恰好在我们的同一台上服务器。

我们最近停止了复制,我想确保我们已正确恢复。

我下载并安装了 Percona Toolkit,但在这种情况下我似乎无法使用 pt-table-checksum,特别是因为基于行的复制:

2.27.5 限制使用基于行的复制 pt-table-checksum 的副本需要基于语句的复制,并且它在主服务器上设置 binlog_format=STATEMENT,但由于 MySQL 限制,副本不支持此更改。因此,校验和不会使用基于行的复制来复制任何副本,这些副本是进一步副本的主副本。该工具会自动检查所有服务器上的 binlog_format。请参阅 --[no]check-binlog-format 。(错误 899415)

是否有其他选项可以对基于行的复制表进行校验和?

我在 Percona 论坛上发现了这个,它说它可以工作,但我不能让它改变我的 cnf 文件,因为它声称它可以。当我尝试运行它时,它还会发出以下警告:

副本 mysql-b.example.com 具有 binlog_format MIXED,这可能会导致 pt-table-checksum 中断复制。请阅读该工具文档的限制部分中的“使用基于行的复制的副本”。如果您了解风险,请指定 --no-check-binlog-format 以禁用此检查。

jyn*_*nus 4

我不明白为什么应用程序需要MIXED复制格式,因为MIXED等于STATEMENT基于 -,但ROW在执行“不安全”查询时更改为格式。因此,MIXED兼容的应用程序应该与STATEMENT和兼容ROW

正如您在此处看到的,如果检测到的格式(服务器端)是ROWMIXED,它会尝试仅针对会话动态更改它。就您而言,它抱怨这里的一名奴隶(它需要SUPER特权)。

假设您没有 3 节点链式复制,或者您使用从站的 binlog 进行任何操作,则可以忽略带有 的警告--no-check-binlog-format。无需更改 my.cnf。问题是,仅会话更改语句会影响您的“需要 MIXED 的应用程序”吗?pt-table-checksum需要自己的计算作为语句完成,因为哈希必须在主站和从站上独立且同步地计算(不是及时的,而是与其他查询相关)。