mysql - 如何持续同步/合并两个 MySQL 数据库到第三个数据库

标签 mysql database mariadb

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

我需要不断地将这两个数据库合并/同步/复制到一个包含两个数据库的数据的数据库中。第三个数据库也将具有相同的结构,但某些表将具有不同的主索引。由于两个源数据库中的订单 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 从主服务器中提取数据并将其合并到客户端中。这并不是那么简单,因为你必须处理重启、崩溃、失败等事情。它仍然是可行的,我已经在 perl 中实现了这个。

关于mysql - 如何持续同步/合并两个 MySQL 数据库到第三个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31211309/

相关文章:

java - 关闭和打开数据库连接?

php - 存储大量文本数据的最佳方式是什么? Mysql/Json 文件?

mysql - 将行分组到多列中并进行计数

mysql - 在 MariaDB 10.2.15 中使用 CASE WHEN DATE 语句

MySQL 锁和使用唯一索引锁定行的语句

c# - .NET Core 2.1 Identity 获取所有用户及其相关角色

mysql - SQL - HAVING 子句中的多行

mysql - MySQL 和 MariaDB 中 JSON_SEARCH 的区别

mysql join, group_concat 和 group by

php - 数据库设计 : implementing several types of the same entity