如何保持多个数据库处于同步状态

Posted

技术标签:

【中文标题】如何保持多个数据库处于同步状态【英文标题】:How to keep multiple database in synchronized state 【发布时间】:2012-04-17 01:09:09 【问题描述】:

我有一些网站运行带有 mysql 后端的 php 应用程序。它们都在不同的服务器上运行,因为它们可能没有 100% 的互联网连接时间。

目前,我正在为每条记录存储修改后的日期时间。以及将记录标记为已删除的标志。由于同步,仍然需要跟踪所有已删除的记录,以便我可以同步删除。

然后每个站点都会跟踪它们何时同步到。

问题是所有网站都进行插入和更新。所以如果一个站点断开了一段时间。它会导致所有其他站点的数据同步出现问题。

知道如何让所有网站保持同步吗?

当前执行同步的程序是用 php 编写的。它遍历所有表并检查自上次同步以来已修改的记录。

【问题讨论】:

您是否排除了复制? dev.mysql.com/doc/refman/5.0/en/replication.html 如果您无法设置mysql replication,那么我怀疑您自己的脚本来执行适合您数据的任何复制将是您唯一的其他方法。您应该真正了解一下您的应用程序设计,看看如何使事情变得足够健壮以承受数据库故障。 复制不起作用,因为我有多个主人。数据库以这种方式设计的原因也是为了容忍互联网故障。通过不良互联网链接与多个站点进行复制往往会导致某些更新以错误的顺序运行。 它需要是一个通用的解决方案。这意味着我无法为某些场景量身定制解决方案。同步是内部框架的一部分,必须适用于许多一般情况。 您将遇到的问题是,如果我在连接丢失时删除记录而您更改它会发生什么...谁赢了?你如何处理这些类型的碰撞?或者更糟糕的是,我们都编辑了同一条记录。当我希望它为 3 时,您将值更改为 2 .... 你明白了。在不了解应该如何处理的情况下,有很多方法可以给这只猫剥皮。 【参考方案1】:

问题解决了。或多或少。除了跟踪上次修改记录的时间之外,现在我还跟踪在当前服务器上创建/修改记录的时间。这意味着我实际上有 2 个时间戳。一个跟踪实际修改时间,一个跟踪何时将此更改复制到此服务器。我只是根据复制记录的时间来同步记录。

【讨论】:

以上是关于如何保持多个数据库处于同步状态的主要内容,如果未能解决你的问题,请参考以下文章

页面刷新JavaScript,Spring Boot时如何保持复选框处于选中状态?

iOS 应用程序如何在后台无限期地保持 TCP 连接处于活动状态?

JNI 保持对对象的全局引用,并使用其他 JNI 方法访问它。在多个 JNI 调用中保持 C++ 对象处于活动状态

如何使用 Apollo/GraphQL 使派生状态保持最新?

服务器断开连接后如何在 Spring MVC 中保持客户端会话处于活动状态

页面重新加载后,如何使用 twitter bootstrap 保持当前选项卡处于活动状态?