如何确定MySQL复制完成



我有一个场景,MySQL将部署在两个独立的区域数据中心。数据中心1-活动(占用流量(数据中心2-被动。将在两个数据中心的MySQL之间设置数据复制。当发生故障切换时,主动和被动数据中心将翻转。

如何在Datacenter 2变为活动状态以接受新请求之前查明数据复制已完成。有没有一种方法可以通过编程方式检查复制队列的深度?我想确保从数据中心1起飞的复制队列中的所有数据都先插入数据中心2,然后才能将其标记为活动并接受新请求。

我知道这种设计会在故障转移期间降低应用程序的可用性,但这没关系。应用程序更喜欢一致性而不是可用性,因此需要确保数据库的所有先前更新(来自其他DC的飞行中(都已完成,然后才能应用新的更新。

谢谢!

检查的方法之一是运行SHOW SLAVE STATUS。这将返回相当多的信息,如正在复制的内容、主日志和从属日志位置以及复制状态。但只是为了确定它是否是最新的,是检查大师身后的秒数。如果滞后主值的秒数为0,则复制是最新的,高于零的是滞后秒数。

尽管我注意到一件事,仅仅因为它说落后5秒并不一定意味着还有5秒,这取决于延迟的原因。

当您从MySQL客户端在命令行/终端上运行SHOW SLAVE STATUS时,最好使用G而不是;,因为它的格式更适合您阅读详细信息。

例如。SHOW SLAVE STATUSG而不是SHOW SLAVE STATUS;

仔细检查Slave_IO_RunningSlave_SQL_Running的值是否都是"是"也是一个好主意,如果其中任何一个都是"否",则master后面的秒数可以显示0,但这意味着复制没有运行,数据库也不是最新的。

最新更新