如何将两个MySQL数据库连续同步/合并为第三个

时间:2015-07-03 16:47:43

标签: mysql database mariadb

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

我需要不断地将这两个数据库合并/同步/复制到一个包含两者数据的数据库中。第三个数据库也将具有相同的结构,但某些表将具有不同的主索引。由于两个源数据库中的订单ID可能会发生冲突,因此我需要为订单ID和客户ID的第三个数据库创建复合索引。

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

假设Orders具有在一台服务器上有效的customer_id值,您必须编写代码以确定如何处理来自其他服务器的冲突ID 。您通过请求“持续合并”进一步使问题复杂化。

我不得不说“不可能”。并且在设计系统时“重新开始”。

答案 1 :(得分:0)

您正在寻找多源复制。在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从主服务器提取数据并将其合并到客户端。这不是那么简单,因为你必须处理诸如重启,崩溃,失败等问题。它仍然可行,我已经在perl中实现了这一点。