我正在运行一个MySql的4台服务器主主集群。(2个服务器版本5.1和2个版本5.5)
在检查从状态时,我看到seconds_behind_master在0,在看到它跳转到2000之后的半秒,所以是第四。
可能是什么?我如何调试它?
复制拓扑:1 -> 2 -> 3 -> 4 -> 1
服务器3的SBM似乎为0,而其他服务器则上下跳。这有用吗?
更新2似乎是服务器1的问题。在服务器4中创建测试表时,在服务器1中签入中继日志显示create语句被立即复制到服务器1中的中继日志,但没有创建表。看起来服务器正在忙着做一些事情,在服务器获得语句时和执行语句之间有很大的延迟。
更新3--在服务器4上也会发生同样的事情。
更新4好的,我发现了问题。服务器1、2和4的复制线程中有“无效查询缓存条目(表)”。禁用缓存后,服务器4正常,但1和2仍然存在此问题。
它看起来像一个常见的bug:http://bugs.mysql.com/bug.php?id=60696
如果有人知道如何解决这个问题,我很高兴听到
发布于 2013-06-12 09:24:13
问题确实是旧的非Percona服务器上的invalidating query cache entries (table),这导致复制停止,直到缓存失效(这需要很长时间)。
如前所述:http://bugs.mysql.com/bug.php?id=60696
我们通过完全转移到Percona MySQL服务器v5.5解决了这个问题,它能够完全禁用查询缓存。
发布于 2013-06-12 04:49:15
mysql的seconds_behind_master值有一个缺陷:它只考虑相对于一个上游跳转的位置。最简单的演示是使用稍微简单的复制拓扑:
server1 -> server2 -> server3
如果server2落后,并且正在处理一些长期运行的查询,则会发生以下情况,假设00:00作为起点:
00:00:大家都还好
00:01: server1向binlog写入两个10分钟的查询,在任何地方都没有复制延迟。
00:02: server2开始处理查询1。server2的复制延迟开始增长,server3的复制延迟保持为零
10:02: server2与查询一一起完成,开始处理查询二。server2复制延迟仍在增长。server3复制延迟突然跳转到10分钟。
20:02: server2是通过查询2完成的,复制延迟再次为零。Server3将在查询3中完成,复制延迟将跳回零,然后在处理下一个查询时备份到10。
因此,跳变行为是由复制延迟不使用全局时间戳造成的,而仅仅是复制链中最后一个“跳转”后面的延迟。我们发现这非常烦人,现在使用MySQL的事件调度器每秒钟更新一次主程序上的计时器表,这样我们实际上可以从全局主节点(在非环拓扑中)看到实际的延迟,或者从环中的任何对等节点中看到实际的延迟。
https://serverfault.com/questions/514993
复制相似问题