我有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 orders_product 6 0 1op_id
>= 935375