我有 1 个主服务器和 2 个从服务器。我在所有服务器上都使用 MySQL 5.1.42。我尝试使用 mk-table-checksum 来验证它们的数据是否同步,但我在其中一个从服务器上得到了意外的结果。
首先,我在主服务器上生成校验和,如下所示:
mk-table-checksum h=localhost --databases MYDB --tables {$table_list} --replicate=MYDB.mk_checksum --chunk-size=10M
我的理解是,这会在主服务器上运行校验和查询,然后通过正常复制将其传播到从服务器。因此,不需要锁定,因为从服务器在自身上运行校验和查询时将处于相同的逻辑时间点。这是正确的吗?
接下来,为了验证校验和是否匹配,我在主服务器上运行以下命令:
mk-table-checksum --databases MYDB --replicate=IRC.mk_checksum --replicate-check 1 h=localhost,u=maatkit,p=xxxx
如果有任何差异,我会像这样修复从属:
mk-table-sync --execute --verbose --replicate IRC.mk_checksum h=localhost,u=maatkit,p=xxxx
完成所有这些操作后,我使用 mk-table-sync 修复了两个从服务器。但是,每次我运行此序列时(在一切都已修复之后),一个从服务器完全同步,但另一个从服务器总是有几个表不同步。我 99.999% 确定从服务器上的数据匹配,因为我修复了所有内容,并且在运行校验和脚本期间主服务器上的表甚至没有更新。什么会导致几个表始终仅在其中一个从服务器上显示不同步?我被难住了。以下是输出:
Differences on h=x.x.x.x,p=...,u=maatkit
DB TBL CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
IRC 产品 10 0 1product_id
>= 147377 ANDproduct_id
< 162085
IRC post_order_survey 0 0 1 1=1
IRC mk_heartbeat 0 0 1 1=1
IRC mailing_list 0 0 1 1=1
IRC honey_pot_log 0 0 1 1=1
IRC 产品 12 0 1product_id
>= 176793 ANDproduct_id
< 191501
IRC 产品 18 0 1product_id
>= 265041
IRC 订单 26 0 1order_id
>= 694472
IRC 订单产品 6 0 1op_id
>= 935375
答案1
--replicate=MYDB.mk_checksum
--replicate=IRC.mk_checksum
为什么会有这种差异?
答案2
您是否曾将这个问题发布到 Maatkit 邮件列表?听起来那里最近有一个帖子。如果不是您,也许您可以劫持该帖子。(我更喜欢在那里回答,我不会在这里跟踪/关注/监控)。