我一直很难弄清楚如何在MySQL中配置分布式数据库系统。我有3台服务器,每台服务器都有相同的数据库模型。我已将它们配置为使用复制 - 因此有1个主服务器和2个服务器。一切正常,但我接下来要做的是“过滤”复制数据。
假设我有两个表:客户和产品。我想将所有产品内容表复制到两个奴隶(我得到了这个部分),但我想将客户从欧洲复制到Slave1,从亚洲复制到Slave2。所以master将包含有关客户的所有信息,但奴隶只是其中的一部分。我该如何实现呢?
据我所知,复制本身不支持这种过滤。我不确定,但似乎分区也不是答案。
MySQL中是否有任何可能有帮助的内置机制?如果没有,你会如何解决这种情况?
答案 0 :(得分:0)
为此,您必须使用自定义方式读取数据,并根据业务逻辑将数据添加到从属1或从属2。
例如,您可以从 binlog 中读取数据库条目的更改,并根据您的输入数据,将其存储在不同的从属数据库中。但是,这可能会有一点延迟。
有一个非常好的系统可以做同样的事情,即maxwell(https://github.com/zendesk/maxwell),它使用kafka来推送具有查询类型和新旧数据的数据库更改事件。现在,在此基础上,您可以编写kafka使用者来读取数据并将其推送到从属数据库中。 maxwell使用与主/从复制器相同的binlog复制器,并且可靠。