我目前正在设置mySQL复制。
我需要从三个地方获取数据。
所以例如我有
需要此数据
server1 - database1
server2 - database2
server3 - database3
在此处存储数据
server4 - database4
我需要这个用于报告目的。
我已经读过你无法连接到一个以上的主人。所以说到这一点,我将尝试一个“主链”拓扑,因为我想我明白这个是怎么回事
所以数据流将如下所示
server1 - > server2 - > server3 - >服务器4
server2 和 server3 将为复制数据库提供黑洞存储引擎,因此我们实际上并未将信息存储在这些服务器上,但信息仍记录到二进制文件中-log所以所有的语句都会逐渐减少,以使server4保持最新状态。
我是否正确理解了这一点?
答案 0 :(得分:2)
这样可行,但不是最好的实现,可能会在将来导致问题。在server1或server2上添加新表之前,您必须在下游服务器上创建BLACKHOLE
表,否则您将最终获得真实表。我想你可以通过编写一个每天晚上在server2和server3上运行的脚本来寻找任何非黑洞表并运行ALTER TABLE
将它们修改为BLACKHOLE
表来解决这个问题。
您是否需要更新报告数据?如果不是,我建议抛弃这个想法,并根据需要定期将数据转储到server4。
编辑:(第二天)经过一番思考后,我想如果这是我,我可能会考虑在 server4 上运行三个独立的MySQL实例,每个实例都是其中一个服务器的直接奴隶。
使用这种方法没有复制链,复制设置更简单/正常,每个数据库对都是自包含的。
运行多个MySQL实例很简单,也很正常,甚至还有一个名为mysqld_multi的工具可以帮助你进行设置。