我发出以下命令:
pt-table-sync --verbose --databases medics --execute h=10.11.22.77,u=root,p=secret h=127.0.0.1,u=root,p=secret
... (以及在DSN上指定D=/t=
的类似命令,只处理一个表) ...
并且,几分钟后,得到了一个看起来很有前途的输出:
# DELETE REPLACE INSERT UPDATE ALGORITHM START END EXIT DATABASE.TABLE
# 25 0 3380 437 Nibble 14:50:49 15:09:05 2 medics.address_book
...但是当我查看目标数据库中的表时,它根本没有改变!重新运行该命令会产生相同的输出,显然是因为该命令每次都看到相同的(未更改)情况,并且它实际上从未实际同步过。
为什么不呢?
(这是使用目前在Ubuntu LTS上可用的Percora Toolkit发行版。此外,两个系统正在运行相同版本的Ubuntu LTS和相同(当前)版本的MySQL。我可以看到软件认为它知道它在做什么,因为(例如)当一个表不存在时它被正确识别。)
(源数据库是一个复制从属。目标是一个不相关的(相同)仅限开发的数据库,它不参与任何复制关系。我不知道源的“复制 slave”状态是如何相关的,但是我想透露这个事实。我宁愿不以master作为源代码运行,并且尚未尝试这样做。)
此SO帖子Percona's pt-table-sync: how to run on more than one table?显示用户发出一个非常相似的命令(我试过的第二个命令,此帖中未显示...)和OP说“这将成功更新table1。”嗯,正如我所料。但我试图做同样的事情而事实并非如此。那么,为什么它不适用于我? :-)
没有错误消息 - 没有线索。没有任何不寻常的明显迹象。
答案 0 :(得分:0)
(这里的“d'Oh!”图标在哪里?)
我发现了问题:这是一个误报警。我正在复制一个与其主人失去同步的奴隶,然后将结果与主人进行比较。
Percona显然已经正确地与其指向的从属设备同步,但当然这些数据与主设备不匹配。