将对多个数据库的更改存储在单个集中数据库中

将对多个数据库的更改存储在单个集中数据库中

设置:位于不同位置的多个 MySQL 数据库,采用相同的方案。这些数据库已投入生产。

动机:我们希望在 Web 界面中显示这些数据库中的信息,清楚地显示该行来自哪个数据库。我们希望能够从单一来源获取这些数据(出于不同的原因,其中之一是分页,如果您使用多个来源,分页会变得很棘手)。

问题:我们如何从多个数据库收集数据,将其存储在一个中心位置并清楚地标记每行的来源?我们讨论过使用一个集中式数据库来跟踪生产数据库的更改,使用相同的架构并增加一个来源列。如果可能的话,我们希望避免在生产环境中进行更改。

由于我们不能使用 MySQL 的复制(不允许多个主服务器连接到单个从服务器),我们还有什么其他选择?是否有任何现有的解决方案,还是我们必须自己编写一些代码?最好的解决方案是在生产中更改数据库模式并添加原点列吗?

集中式数据库的想法并非一成不变。如果有一种解决方案可以解决我们其他问题而无需集中式数据库,那么我们就可以灵活应对。

任何帮助深表感谢。

答案1

您将不得不在某个地方编写一些代码。我的观点是,最好依靠 MySQL 本身能够做的事情,而不要过多地扭曲您现有的应用程序来适应。

我预见到的一个选项是使用 MySQL 惰性复制将每个位置复制回集中式机器上的单独从属进程。现在您当然无法在JOIN本地愉快地将数据重新组合在一起。但它可以让您解决应用程序逻辑中的分页问题,​​方法是使数据在地理上足够接近以便使用,并根据数据所在的从属进程明确定义所有数据的来源。

分页选项可能取决于数据集的大小。如果数据集不是很大,那么您可能只需在应用程序/会话内存中执行分页即可。否则,您可以使用小型集中式数据库实例暂时转储结果。

阅读其他建议将会很有趣。

答案2

使所有 mysql 从属服务器记录(非二进制)到文件。 .. 并将文件通过管道传输到 irc 聊天室 #feed 在服务器上,运行 ircd .. 并收听 #feed 聊天室 .. 并将命令通过管道传输到 | mysql -D master

如果您有第二个只读的“主服务器”,并且该服务器由第一个服务器复制,那么您对第二个服务器的查询将不会锁定/阻止提要。

(至少我在早期版本中看到过这种情况)

相关内容