微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何判断MySQL复制完成?

如何解决如何判断MySQL复制完成?

我有一个场景,其中 MysqL 将部署在 2 个独立的区域数据中心。 数据中心 1 - 活动(获取流量) 数据中心 2 - 被动。 两个数据中心的 MysqL 之间将建立数据复制。当发生故障转移时,主动和被动数据中心将翻转。

如何在 Datacenter 2 变为 Active 以接受新请求之前发现数据复制已完成。有没有办法以编程方式检查复制队列的深度?我想确保来自数据中心 1 的复制队列中的所有数据首先插入到数据中心 2 中,然后才能将其标记为活动并接受新请求。

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

谢谢!

解决方法

检查的方法之一是运行 SHOW SLAVE STATUS。这将返回大量信息,例如正在复制的内容、主从日志位置以及复制状态。但是只是为了确定它是否最新是检查master后面的秒数。如果主值落后的秒数为 0,则复制是最新的,零以上是落后的秒数。

虽然我注意到一件事,只是因为它说落后 5 秒并不总是意味着还有 5 秒,这取决于导致延迟的原因。

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

例如 SHOW SLAVE STATUS\G 代替 SHOW SLAVE STATUS;

再次检查Slave_IO_RunningSlave_SQL_Running的值都是yes也是一个好主意,如果其中一个不是,master后面的秒数可以显示0,但这意味着复制不是正在运行并且数据库不是最新的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。