可以在任意主库和备库之间建立复制,只有一个限制: 一个备库只能有一个主库。
前面已经介绍了如何为一个主库设置一个备库,接下来介绍其他比较普遍的拓扑结构以及优缺点。记住以下原则:
1)一个MySQL 备库实例只能有一个主库。
2)每个备库必须有一个唯一的服务器ID。
3)一个主库可以有多个备库。
4)如果打开了 log_slave_updates 选项,一个备库可以把其主库上的数据变化传播到其他备库。
一主库对多备库
事实上一主多备的结构和配置基本上差不多,因为备库之间根本没有交互。
尽管这是非常简答的拓扑结构,但它可以满足多种需求。下面是它的一些用途:
1)为不同的角色使用不用的备库。
2)把一台备库当做待用的主库,除了复制没有其他数据传输。
3)把一台备库放到远程数据中心,用做灾难恢复。
4)延迟一个或多个备库,以备灾难恢复。
5)使用其中一个备库,用做备份、培训、开发或者测试使用服务器。
主动 — 主动模式下的主 — 主复制
主 - 主复制(也叫双主复制或双向复制)包含两台服务器,每一个都被配置成对方的主库和备库。
这种配置最大的问题就是如何解决冲突,两个可写的互主服务器导致的问题非常多。这通常发生在两台服务器同时修改一行记录,或同时在两台服务器上包含一个 AUTO_INCREMENT 列的表里插入数据。
MySQL 5.0 增加了一些特性,使得这种配置稍微安全了点。总地来说,允许向两个服务器上写入所带来的麻烦远远大于其带来的好处。
主动 — 被动模式下的 主 — 主复制
这是前面描述的主 - 主结构的变体,它能够避免上面的问题。这也是构建容错性和高可用性系统的非常强大的方式,主要区别在于另一台服务器是只读的被动服务器。
这种方式使得反复切换主动和被动服务器非常方便,因为服务器的配置是对称的。这使得故障转移和故障恢复很容易。
对两台服务器上执行如下设置后,会使其拥有对称的设置:
1.确保两台服务器上有相同的数据
2.启用二进制日志,选择唯一的服务器ID,并创建复制账号。
3.启用备库更新的日志记录,这是故障转移和故障恢复的关键。
4.把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突,这一点是可选的
5.启动每个服务器上的 MySQL 实例
6.将每个主库设置成对方的备库,使用新创建的二进制日志开始工作。
拥有备库的主 — 主结构
另外一种相关的配置是为每一个主库增加一个备库。
这种配置的优点是增加了冗余,对于不同地理位置的复制拓扑,能够消除站点单点失效的问题。
环形复制
双主结构实际上是环形结构的一种特例。环形结构可以有三个或者更多的主库。每个服务器都是在它之前的服务器的备库,是在它之后的服务器的主库。这种结构也被称为环形复制。
因为唯一可以根据服务器ID 将其过滤的服务器是创建这个事件的服务器,总地来说,环形结构非常脆弱,应该尽量避免。
可以通过为每个节点增加备库的方式来减少环形复制的风险。