3

我目前正在设置 mySQL 复制。

我需要从三个地方获取数据。

所以例如我有

需要此数据
server1 - database1
server2 - database2
server3 - database3

在此处存储数据
server4 - database4

我需要这个用于报告目的。

我读过你不能连接到一个以上的主人。话虽如此,我将尝试一种“主链”拓扑,因为我想我理解这个拓扑是怎么回事

所以数据流看起来像这样

服务器1- >服务器2- >服务器3- >服务器4

server2server3将具有用于复制数据库的黑洞存储引擎,因此我们实际上不会将信息存储在这些服务器上,但信息仍会记录到二进制日志中,因此所有语句都会向下传递以使 server4 保持最新。

我是否正确理解这一点?

4

1 回答 1

2

这将起作用,但不是最好的实现,将来很可能会给您带来问题。在 server1 或 server2 上添加新表之前,您必须BLACKHOLE在下游服务器上创建表,否则您将得到真正的表。我想你可以通过编写一个每晚在 server2 和 server3 上运行的脚本来解决这个问题,该脚本查找任何非黑洞表并运行将ALTER TABLE它们修改为BLACKHOLE表。

您是否需要及时更新报告数据?如果不是,我建议放弃整个想法,并根据需要定期将数据转储到 server4 中。

编辑:(第二天)经过一番思考,我想如果这是我,我可能会考虑在server4上运行三个单独的 MySQL 实例,每个实例都作为其中一台服务器的直接从属服务器。

使用这种方法没有复制,复制设置更简单/正常,每个数据库对都是自包含的。

运行多个 MySQL 实例既简单又相当正常,甚至还有一个名为mysqld_multi的工具可以帮助您进行设置。

于 2011-05-04T20:04:52.660 回答