6

我想制作一台专用的 SLAVE 机器,用于在三个不同的服务器上复制三个数据库的数据。换句话说,我想做多主 => 单从复制。

有没有办法做到这一点,尽可能简单?

谢谢 !

4

4 回答 4

10

MySQL(除了 MySQL Cluster)不支持多主复制(具有多个主的从属)。您可以对循环(环)复制(在此处此处进行描述)进行主-主复制。

高性能 MySQL 第 2 版中,作者描述了一种使用主-主复制和存储引擎的巧妙组合来模拟多主复制的方法Blackhole(第 8 章复制 > 复制拓扑 > 自定义复制解决方案 > 模拟多主复制 p. 373 - 375)。

它们显示了两种可能的拓扑:

使用两个 co-master(允许从Master 1切换到Master 2的 master )

  • Master 1:托管DB1并从Master 2复制DB2DB2中所有表的存储引擎都更改为,以便数据不会有效地存储在Master 1上。Blackhole
  • Master 2:托管DB2并从Master 1复制DB1将DB1中所有表的存储引擎更改为,使数据无法有效存储在Master 2上Blackhole
  • 从站 1:主站 1主站 2复制DB1DB2(允许切换主站);结果是Slave 1复制了两个数据库,它们有效地托管在两个不同的 master 上。

使用主链

  • Master 1:仅托管DB1
  • Master 2:托管DB2并从Master 1复制DB1将DB1中所有表的存储引擎更改为,使数据无法有效存储在Master 2上Blackhole
  • 从站 1:主站 2复制DB1DB2;结果是Slave 1复制了两个数据库,它们有效地托管在两个不同的 master 上。

请注意,此设置仅允许您通过Master 1向DB1发送更新,向Master 2DB2发送更新。您不能将任一表的更新发送给任意主控。

也许可以将所描述的解决方案与 hack 结合起来,实现真正的 master-master 复制(允许对两个 master 进行更新),该复制使用某种 autoincrement-mangling 并在此处此处进行了描述。

于 2009-10-16T08:43:10.037 回答
0

没办法,我不知道。

但是,如果这里的要求只是拥有一个基于复制的备份机器,您可以轻松地运行三个 MySQL 服务器(在不同的地址和/或端口上)——我们在这里这样做,有两个复制环,每个都包含我们的-house 登台服务器作为节点。

一个现成的想法,如果您确实希望将所有数据放到一个服务器中并且表模式是固定的,或者几乎是静态的并且在您的控制之下:设置一个服务器并打开三个数据库并链接所有使用联合引擎的表。理论上(巨大的警告:我从未尝试过!),然后您可以将这些联合表复制到第二台服务器上(同样,可能在同一台机器上),在单个 MySQL 上为您提供数据的真实实时副本实例。您甚至可以尝试再次复制回来,但这可能是疯狂的:)

于 2009-10-16T07:56:01.220 回答
0

我对 MySQL 了解不多,但是您是否无法设置“仅上传”复制配置,其中主/发布者的角色仅收集在从/订阅者级别进行的更新。

于 2009-10-16T08:55:59.880 回答
0

可能值得一看maatkit 的表同步——它不是“真正的”复制,但它可能已经足够好了。

于 2009-11-25T11:47:22.903 回答