# 第十七章 复制

**目录**

[17.1 配置复制](replication-configuration.html)
[17.1.1 基于二进制日志文件位置的复制配置概述](binlog-replication-configuration-overview.html)
[17.1.2 设置基于二进制日志文件位置的复制](replication-howto.html)
[17.1.3 使用全局事务标识符进行复制](replication-gtids.html)
[17.1.4 在在线服务器上更改 GTID 模式](replication-mode-change-online.html)
[17.1.5 MySQL 多源复制](replication-multi-source.html)
[17.1.6 复制和二进制日志记录选项和变量](replication-options.html)
[17.1.7 常见复制管理任务](replication-administration.html)
[17.2 复制实现](replication-implementation.html)
[17.2.1 复制格式](replication-formats.html)
[17.2.2 复制通道](replication-channels.html)
[17.2.3 复制线程](replication-implementation-details.html)
[17.2.4 中继日志和复制元数据存储库](replica-logs.html)
[17.2.5 服务器如何评估复制过滤规则](replication-rules.html)
[17.3 复制安全](replication-security.html)
[17.3.1 设置复制以使用加密连接](replication-solutions-encrypted-connections.html)
[17.3.2 加密二进制日志文件和中继日志文件](replication-binlog-encryption.html)
[17.3.3 复制权限检查](replication-privilege-checks.html)
[17.4 复制解决方案](replication-solutions.html)
[17.4.1 使用复制进行备份](replication-solutions-backups.html)
[17.4.2 处理副本的意外停止](replication-solutions-unexpected-replica-halt.html)
[17.4.3 监控基于行的复制](replication-solutions-rbr-monitoring.html)
[17.4.4 使用具有不同源和副本存储引擎的复制](replication-solutions-diffengines.html)
[17.4.5 使用复制进行横向扩展](replication-solutions-scaleout.html)
[17.4.6 将不同的数据库复制到不同的副本](replication-solutions-partitioning.html)
[17.4.7 提高复制性能](replication-solutions-performance.html)
[17.4.8 故障转移期间切换源](replication-solutions-switch.html)
[17.4.9 使用异步连接故障转移切换源和副本](replication-asynchronous-connection-failover.html)
[17.4.10 半同步复制](replication-semisync.html)
[17.4.11 延迟复制](replication-delayed.html)
[17.5 复制说明和技巧](replication-notes.html)
[17.5.1 复制功能和问题](replication-features.html)
[17.5.2 MySQL 版本之间的复制兼容性](replication-compatibility.html)
[17.5.3 升级复制拓扑](replication-upgrade.html)
[17.5.4 复制故障排除](replication-problems.html)
[17.5.5 如何报告复制错误或问题](replication-bugs.html)

[](<>)[](<>)[](<>)[](<>)

复制可以将来自一台 MySQL 数据库服务器（称为源）的数据复制到一台或多台 MySQL 数据库服务器（称为副本）。复制默认是异步的；副本不需要永久连接即可从源接收更新。根据配置，您可以复制数据库中的所有数据库、选定的数据库甚至选定的表。

MySQL 中复制的优点包括：

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

-   数据安全——因为副本可以暂停复制过程，所以可以在副本上运行备份服务而不会损坏相应的源数据。

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

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

    有关如何在此类情况下使用复制的信息，请参阅[第 17.4 节，“复制解决方案”](replication-solutions.html).

    MySQL 8.0 支持不同的复制方法。传统方法是基于从源的二进制日志中复制事件，并要求源和副本之间同步日志文件和其中的位置。基于全局事务标识符 (GTID) 的较新方法是事务性的，因此不需要处理日志文件或这些文件中的位置，这极大地简化了许多常见的复制任务。只要在源上提交的所有事务也已在副本上应用，使用 GTID 的复制可以保证源和副本之间的一致性。有关 MySQL 中 GTID 和基于 GTID 的复制的更多信息，请参阅[第 17.1.3 节，“使用全局事务标识符进行复制”](replication-gtids.html).有关使用基于二进制日志文件位置的复制的信息，请参阅[第 17.1 节，“配置复制”](replication-configuration.html).

    MySQL 中的复制支持不同类型的同步。最初的同步类型是单向异步复制，其中一台服务器充当源，而一台或多台其他服务器充当副本。这与*同步*复制是 NDB Cluster 的一个特性（参见[第 23 章，*MySQL NDB 集群 8.0*](mysql-cluster.html)）。在 MySQL 8.0 中，除了内置的异步复制外，还支持半同步复制。使用半同步复制，在返回到执行事务的会话之前对源块执行的提交，直到至少一个副本确认它已接收并记录事务的事件；看[第 17.4.10 节，“半同步复制”](replication-semisync.html).MySQL 8.0 还支持延迟复制，这样一个副本故意落后于源至少指定的时间量；看[第 17.4.11 节，“延迟复制”](replication-delayed.html).对于场景*同步*需要复制，请使用 NDB Cluster（请参阅[第 23 章，*MySQL NDB 集群 8.0*](mysql-cluster.html)）。

    有许多解决方案可用于在服务器之间设置复制，使用的最佳方法取决于数据的存在和您使用的引擎类型。有关可用选项的更多信息，请参阅[第 17.1.2 节，“设置基于二进制日志文件位置的复制”](replication-howto.html).

    复制格式有两种核心类型，一种是基于语句的复制 (SBR)，它复制整个 SQL 语句，另一种是基于行的复制 (RBR)，它只复制更改的行。您还可以使用第三种类型，即基于混合的复制 (MBR)。有关不同复制格式的更多信息，请参阅[第 17.2.1 节，“复制格式”](replication-formats.html).

    复制是通过许多不同的选项和变量来控制的。有关详细信息，请参阅[第 17.1.6 节，“复制和二进制日志记录选项和变量”](replication-options.html).可以将其他安全措施应用于复制拓扑，如中所述[第 17.3 节，“复制安全”](replication-security.html).

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

    有关在复制过程中如何处理不同数据类型和语句的注释和提示，包括复制功能、版本兼容性、升级和潜在问题及其解决方案的详细信息，请参阅[第 17.5 节，“复制说明和提示”](replication-notes.html).有关 MySQL 复制新手经常提出的一些问题的答案，请参阅[第 A.14 节，“MySQL 8.0 常见问题解答：复制”](faqs-replication.html).

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