MySQL 5.6 参考手册  /  第十七章复制

第十七章复制

复制使来自一台 MySQL 数据库服务器(源)的数据能够复制到一台或多台 MySQL 数据库服务器(副本)。默认情况下,复制是异步的,因此副本不需要永久连接即可从源接收更新。这意味着更新可以通过长距离连接甚至通过临时或间歇性连接(例如拨号服务)进行。根据配置,您可以复制所有数据库、选定的数据库,甚至是数据库中选定的表。

有关 MySQL 复制新手经常提出的一些问题的答案,请参阅第 A.14 节,“MySQL 5.6 常见问题解答:复制”

MySQL 中复制的优点包括:

  • 横向扩展解决方案 - 在多个副本之间分散负载以提高性能。在此环境中,所有写入和更新都必须在复制源服务器上进行。然而,读取可能发生在一个或多个副本上。该模型可以提高写入性能(因为源专用于更新),同时在越来越多的副本中显着提高读取速度。

  • 数据安全——因为数据被复制到副本,并且副本可以暂停复制过程,所以可以在副本上运行备份服务而不会破坏源上的相应数据。

  • 分析 - 可以在源上创建实时数据,而信息分析可以在副本上进行,而不会影响源的性能。

  • 远程数据分发 - 如果分支机构想要使用您的主要数据的副本,您可以使用复制来创建数据的本地副本以供其使用,而无需永久访问源。

MySQL 中的复制功能支持单向异步复制,其中一台服务器充当源,而一台或多台其他服务器充当副本。这与 同步复制形成对比,后者是 NDB Cluster 的一个特征(请参阅第 18 章,MySQL NDB Cluster 7.3 和 NDB Cluster 7.4)。在 MySQL 5.6 中,除了内置的异步复制之外,还支持半同步复制的接口。使用半同步复制,在返回到执行事务的会话之前对源块执行提交,直到至少一个副本确认它已接收并记录了事务的事件。看 第 17.3.9 节,“半同步复制” MySQL 5.6 还支持延迟复制,这样副本服务器故意落后于源服务器至少指定的时间量。请参阅 第 17.3.10 节,“延迟复制”对于需要同步复制的场景 ,使用 NDB Cluster(参见第 18 章,MySQL NDB Cluster 7.3 和 NDB Cluster 7.4)。

有许多解决方案可用于在两个服务器之间设置复制,但最佳使用方法取决于数据的存在和您使用的引擎类型。有关可用选项的更多信息,请参阅 第 17.1.1 节,“如何设置复制”

复制格式有两种核心类型,一种是基于语句的复制 (SBR),它复制整个 SQL 语句,另一种是基于行的复制 (RBR),它只复制更改的行。您还可以使用第三种方法,即基于混合的复制 (MBR)。有关不同复制格式的更多信息,请参阅 第 17.1.2 节,“复制格式”。在 MySQL 5.6 中,基于语句的格式是默认的。

MySQL 5.6.5 及更高版本支持基于 全局事务标识符 (GTID) 的事务复制。使用这种类型的复制时,无需直接处理日志文件或这些文件中的位置,这大大简化了许多常见的复制任务。因为使用 GTID 的复制完全是事务性的,所以只要在源上提交的所有事务也已应用到副本上,就可以保证源和副本之间的一致性。有关 GTID 和基于 GTID 的复制的更多信息,请参阅 第 17.1.3 节,“使用全局事务标识符进行复制”

复制是通过许多不同的选项和变量来控制的。这些控制着复制的核心操作、超时以及可以应用于数据库和表的数据库和过滤器。有关可用选项的更多信息,请参阅第 17.1.4 节,“复制和二进制日志记录选项和变量”

您可以使用复制来解决许多不同的问题,包括性能问题、支持不同数据库的备份,以及作为减轻系统故障的更大解决方案的一部分。有关如何解决这些问题的信息,请参阅 第 17.3 节,“复制解决方案”

有关复制期间如何处理不同数据类型和语句的注释和提示,包括复制功能的详细信息、版本兼容性、升级和问题及其解决方案,包括常见问题解答,请参阅 第 17.4 节,“复制注释和提示”

有关复制的实现、复制如何工作、二进制日志的过程和内容、后台线程以及用于决定如何记录语句和复制的规则的详细信息,请参阅 第 17.2 节,“复制实现”