如何连续 sync/merge 两个 MySQL 数据库变成第三个

How to continuously sync/merge two MySQL databases into a third one

我有两个MySQL(也可以是MariaSQL)数据库。它们具有相同的结构。假设他们有两张桌子。客户和订单。

我需要不断地merge/sync/replicate将这两个数据库合并为一个数据库,其中包含来自这两个数据库的数据。第三个数据库也将具有相同的结构,但一些表将具有不同的主索引。因为两个源数据库中的订单 ID 可能会发生冲突,所以我需要为订单 ID 和客户 ID 的第三个数据库创建一个复合索引。

我只会从第三个数据库读取数据,因此无需将更改同步回源数据库。不同的应用程序正在将数据写入这两个源数据库。此应用不受我控制,我无法更改数据或数据库结构。

我这样做的原因是我有两个数据源和一个可以从这些源访问数据的应用程序。而且我无法知道给定客户存储在哪个数据库中,因此如果我想避免搜索两者,我需要将它们全部同步到一个数据库中。

所以问题是:将这两个数据库同步到一个数据库中的最简单方法是什么?

谢谢!

您正在寻找多源复制。在 MySQL 5.7 中有一个非常简单的实现:

http://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html

但是,它不会应用任何逻辑。

在 5.6 中有一个 binlog api,更多信息:http://cdn.oreillystatic.com/en/assets/1/event/61/Binary%20log%20API_%20A%20Library%20for%20Change%20Data%20Capture%20using%20MySQL%20Presentation.pdf

传统上,您会使用 mysqlbinlog 从 masters 中提取数据并将其合并到客户端中。这不是那么简单,因为你必须处理重启、崩溃、失败等事情。它仍然是可行的,我已经在 perl 中实现了。

假设 Orders 具有 customer_id 在一台服务器上有效的值,您将必须编写 code 来弄清楚如何处理冲突来自其他服务器的 ID。您通过请求 "continuous merging".

使问题进一步复杂化

不得不说"not possible"。 "start over" 设计您的系统。