Skip to main content

1.复制简介

复制使数据能够从一台 MySQL 数据库服务器(称为源)复制到一台或多台 MySQL 数据库服务器(称为副本)。 复制默认是异步的; 副本不需要永久连接即可从源接收更新。 根据配置,可以复制所有数据库、选定的数据库,甚至数据库中选定的表。

MySQL 中复制的优点包括:

  • 横向扩展解决方案 - 在多个副本之间分散负载以提高性能。 在此环境中,所有写入和更新都必须在源服务器上进行。 然而,读取可能发生在一个或多个副本上。 该模型可以提高写入性能(因为源专用于更新),同时显着提高越来越多副本的读取速度。
  • 数据安全——由于副本可以暂停复制过程,因此可以在副本上运行备份服务,而不会损坏相应的源数据。
  • 分析 - 可以在源上创建实时数据,同时可以在副本上进行信息分析,而不会影响源的性能。
  • 远距离数据分发 - 可以使用复制来创建数据的本地副本以供远程站点使用,而无需永久访问源。

MySQL 8.3 支持不同的复制方法。 传统方法基于从源二进制日志复制事件,并要求日志文件及其中的位置在源和副本之间同步。 基于全局事务标识符 (GTID) 的新方法是事务性的,因此不需要使用日志文件或这些文件中的位置,这极大地简化了许多常见的复制任务。 只要在源上提交的所有事务也都已应用到副本上,使用 GTID 的复制就可以保证源和副本之间的一致性。

MySQL 中的复制支持不同类型的同步。 原始的同步类型是单向异步复制,其中一台服务器充当源,而一台或多台其他服务器充当副本。 这与 NDB Cluster 的特征同步复制形成对比。 在MySQL 8.3中,除了内置的异步复制之外,还支持半同步复制。 通过半同步复制,在返回到执行事务的会话之前对源块执行提交,直到至少一个副本确认它已接收并记录事务的事件。 MySQL 8.3 还支持延迟复制,即副本故意落后于源至少指定的时间。 对于需要同步复制的场景,请使用NDB Cluster。

有许多解决方案可用于在服务器之间设置复制,最佳使用方法取决于数据的存在和正在使用的引擎类型。

复制格式有两种核心类型:基于语句的复制 (SBR),它复制整个 SQL 语句;以及基于行的复制 (RBR),它仅复制更改的行。 还可以使用第三种,即基于混合的复制 (MBR)。

复制是通过许多不同的选项和变量来控制的。 可以对复制拓扑应用其他安全措施。

可以使用复制来解决许多不同的问题,包括性能、支持不同数据库的备份以及作为更大解决方案的一部分来缓解系统故障。

有关在复制过程中如何处理不同数据类型和语句的注释和提示,包括复制功能、版本兼容性、升级以及潜在问题及其解决方案的详细信息,请参阅文章: “复制注释和提示”。 有关 MySQL 复制新手经常提出的一些问题的解答,请参阅文章:“MySQL 8.3 常见问题解答:复制”。

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