第十六章复制

目录

复制使数据可以从一台 MySQL 数据库服务器(源)复制到一台或多台 MySQL 数据库服务器(副本)。默认情况下,复制是异步的;副本无需永久连接即可从源接收更新。根据配置,您可以复制数据库中的所有数据库,选定的数据库,甚至选定的 table。

MySQL 中复制的优点包括:

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

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

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

  • 远程数据分发-您可以使用复制来创建数据的本地副本以供远程站点使用,而无需永久访问源。

有关在这种情况下如何使用复制的信息,请参阅第 16.3 节“复制解决方案”

MySQL 5.7 支持不同的复制方法。传统方法基于复制源二进制日志中的事件,并且要求日志文件及其中的位置在源和副本之间同步。基于全局事务标识符(GTID)的较新方法是事务性的,因此不需要使用日志文件或这些文件中的位置,从而大大简化了许多常见的复制任务。使用 GTID 进行复制可确保源和副本之间的一致性,只要在源上提交的所有事务也都已应用到副本上即可。有关 MySQL 中 GTID 和基于 GTID 的复制的更多信息,请参见第 16.1.3 节“使用全局事务标识符进行复制”。有关使用基于二进制日志文件位置的复制的信息,请参见第 16.1 节“配置复制”

MySQL 中的复制支持不同类型的同步。同步的原始类型是单向异步复制,其中一台服务器充当源,而一台或多台其他服务器充当副本。这与 NDB Cluster 的特性“同步”复制相反(请参阅第 21 章,MySQL NDB 群集 7.5 和 NDB 群集 7.6)。在 MySQL 5.7 中,除了内置的异步复制外,还支持半同步复制。对于半同步复制,在返回执行事务的会话之前,在源块上执行了提交,直到至少一个副本确认它已接收并记录了事务事件为止。参见第 16.3.9 节“同步复制”。 MySQL 5.7 还支持延迟复制,以便副本故意在源之后至少指定的时间量。参见第 16.3.10 节,“延迟复制”。对于需要“同步”复制的方案,请使用 NDB 群集(请参见第 21 章,MySQL NDB 群集 7.5 和 NDB 群集 7.6)。

有许多解决方案可用于设置服务器之间的复制,最佳的使用方法取决于数据的存在和所使用的引擎类型。有关可用选项的更多信息,请参见第 16.1.2 节“设置基于二进制日志文件位置的复制”

复制格式有两种核心类型:基于语句的复制(SBR),它复制整个 SQL 语句;和基于行的复制(RBR),它仅复制更改的行。您还可以使用第三种混合混合复制(MBR)。有关不同复制格式的更多信息,请参见第 16.2.1 节“复制格式”

复制是通过许多不同的选项和变量来控制的。有关更多信息,请参见第 16.1.6 节“复制和二进制日志记录选项和变量”

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

有关在复制过程中如何处理不同数据类型和语句的 Comments 和技巧,包括复制功能,版本兼容性,升级以及潜在问题及其解决方案的详细信息,请参阅第 16.4 节“复制说明和技巧”。有关 MySQL 复制新手经常问的一些问题的答案,请参见第 A.14 节“ MySQL 5.7 FAQ:复制”

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