复制使来自一个 MySQL 数据库服务器(称为源)的数据能够复制到一个或多个 MySQL 数据库服务器(称为副本)。默认情况下,复制是异步的;副本不需要永久连接才能接收来自源的更新。根据配置,您可以复制所有数据库、选定的数据库,甚至数据库中的选定表。
MySQL 中复制的优点包括
扩展解决方案 - 将负载分散到多个副本上以提高性能。在此环境中,所有写入和更新都必须在源服务器上进行。但是,读取可以在一个或多个副本上进行。此模型可以提高写入性能(因为源专门用于更新),同时显着提高跨越来越多的副本的读取速度。
数据安全性 - 由于副本可以暂停复制过程,因此可以在副本上运行备份服务,而不会损坏相应的源数据。
分析 - 可以在源上创建实时数据,而信息分析可以在副本上进行,而不会影响源的性能。
远程数据分发 - 您可以使用复制为远程站点创建本地数据副本,而无需永久访问源。
有关如何在这些场景中使用复制的信息,请参见第 19.4 节,“复制解决方案”。
MySQL 8.4 支持不同的复制方法。传统方法是基于从源服务器的二进制日志复制事件,并且需要日志文件和其中的位置在源服务器和副本之间同步。基于 全局事务标识符 (GTID) 的较新方法是事务性的,因此不需要处理日志文件或文件中的位置,这极大地简化了许多常见的复制任务。使用 GTID 的复制保证源服务器和副本之间的一致性,只要源服务器上提交的所有事务也已应用到副本上。有关 GTID 和基于 GTID 的复制在 MySQL 中的更多信息,请参见 第 19.1.3 节,“使用全局事务标识符复制”。有关使用二进制日志文件位置的复制的信息,请参见 第 19.1 节,“配置复制”。
MySQL 中的复制支持不同类型的同步。原始的同步类型是单向异步复制,其中一台服务器充当源服务器,而其他一台或多台服务器充当副本。这与 同步 复制形成对比,它是 NDB Cluster 的一个特征(参见 第 25 章,MySQL NDB Cluster 8.4)。在 MySQL 8.4 中,除了内置的异步复制之外,还支持半同步复制。使用半同步复制,在返回到执行事务的会话之前,在源服务器上执行的提交会阻塞,直到至少有一个副本确认它已收到并记录了该事务的事件;请参见 第 19.4.10 节,“半同步复制”。MySQL 8.4 还支持延迟复制,这样副本可以有意地落后于源服务器至少指定的时间量;请参见 第 19.4.11 节,“延迟复制”。对于需要 同步 复制的场景,请使用 NDB Cluster(参见 第 25 章,MySQL NDB Cluster 8.4)。
有多种解决方案可用于在服务器之间设置复制,最佳使用方法取决于您使用的数据库和引擎类型。有关可用选项的更多信息,请参见 第 19.1.2 节,“设置基于二进制日志文件位置的复制”。
有两种主要的复制格式类型,基于语句的复制 (SBR),它复制完整的 SQL 语句,以及基于行的复制 (RBR),它只复制更改的行。您也可以使用第三种变体,混合基于复制 (MBR)。有关不同复制格式的更多信息,请参见 第 19.2.1 节,“复制格式”。
复制通过许多不同的选项和变量来控制。有关更多信息,请参见 第 19.1.6 节,“复制和二进制日志记录选项和变量”。可以对复制拓扑应用额外的安全措施,如 第 19.3 节,“复制安全性” 中所述。
您可以使用复制来解决许多不同的问题,包括性能、支持不同数据库的备份以及作为缓解系统故障的更大解决方案的一部分。有关如何解决这些问题的的信息,请参见 第 19.4 节,“复制解决方案”。
有关复制过程中不同数据类型和语句的处理方式的说明和技巧,包括复制功能的详细信息、版本兼容性、升级以及潜在问题及其解决方法,请参见 第 19.5 节,“复制说明和技巧”。有关那些刚接触 MySQL 复制的人经常问的一些问题的答案,请参见 第 A.14 节,“MySQL 8.4 常见问题解答:复制”。
有关复制实现的详细信息、复制的工作原理、二进制日志的过程和内容、后台线程以及用于决定如何记录和复制语句的规则,请参见 第 19.2 节,“复制实现”。