MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个备库的方式来进行数据同步。复制功能不仅有利于构建高性能的应用,同时也是搞可用性、高扩展性、灾难恢复、备份以及数据仓库等工作的的基础。

8.1 概述

复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另一台服务器的主库。主库和备库之间可以有多种不同的组合方式。

8.1.1 解决的问题

数据分布,负载均衡,备份,高可用性和故障切换,升级测试

8.1.2 如何工作

mysql复制function_复制

8.2 配置复制

以下几步:

1.为每台服务器创建复制账号。

2.配置主库和备库。

3.通知备库连接到主库并从主库复制数据。

8.3 复制的原理

8.3.1 基于语句的复制

在早期的版本中只支持基于语句的复制(逻辑复制),这在数据库领域是很少见的。此模式下,主库会记录那些造成数据更改的查询,当备库读取并重放这些事件时,实际上只是把主库执行的SQL再执行一遍。

8.3.2 基于行的复制

后来的版本支持基于行的复制,这种方式会将实际数据记录在二进制中,跟其他数据库的实现比较像。最大的好处是可以复制每一行。一些语句可以被更加有效地复制。

8.3.3 两种比较

理论上基于行的复制整体更优,并在实际应用中也适合大部分场景。但这种方式太新以至于没有将一些特殊的功能加入来满足数据库管理员的操作需求,因此现在还有一些人没有开始使用。

8.4 复制拓扑

可以在任意主库和备库之间建立复制,只有一个限制:每一个备库只能有一个主库。有很多复制的拓扑结构,但即使是最简单的也可以非常灵活。一种拓扑可以有多种用途。

8.4.1 一主库多备库

除了两台服务器的主备结构外,这是最简单的拓扑结构。事实上一主多备的结构和级别配置差不多简单,因为备库之间根本没有交互,它们仅仅是连接到同一个主库上。

8.4.2 主动-主动模式下的主-主复制

主-主复制(双主复制或双向复制)包含两台服务器,每一个都被配置成对方的主库和备库,换句话说,它们是一对主库。

8.4.3 主动-被动模式下的主-主复制

这是主-主的变体。这也是构建容错性和高可用性系统非常强大的方式,主要区别在于其中的一台服务器是只读的被动服务器。

8.4.4 拥有备库的主-主结构

mysql复制function_数据_02

8.4.5 环形复制

双主结构其实是环形结构的一种特例。环形结构可以有三个或更多的主库。每个服务器都是在它之前的服务器的备库,是它之后服务器的主库。

8.4.6 主库、分发主库以及备库

如果需要多个备库,可以从主库移除负载并使用分发主库。分发主库事实上也是一个备库,它的唯一目的就是提取和提供主库的二进制日志。多个备库连接到分发主库,使原来的主库保存了负担。

8.4.7 树或金字塔型

mysql复制function_数据_03

8.4.8 定制的复制

MySQL的复制非常灵活,可以根据需要定制解决方案。典型的定制方案包括组合过滤、分发和向不同的存储引擎复制。也可以使用黑客手段。可以根据需要任意设计。这其中最大的限制是合理地监控和管理,以及所拥有资源的约束。