我目前正在设置mySQL复制。
我需要从三个地方获取数据。
例如我有
需要这些数据
Server1 - database1
Server2 - database2
Server3 - database3
此处存储数据
Server4 - database4
我需要这个做报告。
我知道你不能连接多个主机。所以说,我要尝试一个"主链"拓扑因为我想我知道这个是怎么回事了
数据流是这样的
server1 -> server2 -> server3 -> server4
server2和server3将具有用于复制数据库的黑洞存储引擎,因此我们实际上不会将信息存储在这些服务器上,但信息仍然记录到二进制日志中,因此所有语句将滴流下来以保持server4最新。
我理解对了吗?
这可以工作,但不是最好的实现,并且可能在将来给您带来问题。在server1或server2上添加新表之前,必须在下游服务器上创建BLACKHOLE
表,否则最终得到的将是真正的表。我猜你可以通过编写一个脚本来解决这个问题,该脚本每天晚上在server2和server3上运行,寻找任何非黑洞表,并运行ALTER TABLE
将它们修改为BLACKHOLE
表。
你需要报告数据是最新的吗?如果没有,我建议放弃这个想法,只根据需要定期将数据转储到server4中。
edit:(第二天)经过一些思考,我认为如果这是我,我可能会考虑在server4上运行三个独立的MySQL实例每个实例作为其中一个服务器的直接从属。
使用这种方法,没有复制链,复制设置更简单/正常,每个db对都是自包含的。
运行多个MySQL实例很容易,也很正常,甚至有一个叫做mysqld_multi的工具可以帮助你设置它。