MySql 中文参考指南
Chapter 19 Replication
目录
复制能够将一个 MySQL 数据库服务器(称为源)中的数据复制到一个或多个 MySQL 数据库服务器(称为副本)。复制默认情况下是异步的;副本不需要永久连接以从源接收更新。根据配置,您可以在数据库中复制所有数据库、选定数据库,甚至选定表。
MySQL 中复制的优势包括:
-
可扩展解决方案 - 在多个副本之间分散负载以提高性能。在此环境中,所有写入和更新都必须在源服务器上进行。但是,可以在一个或多个副本上进行读取。此模型可以提高写入性能(因为源专用于更新),同时可以随着副本数量的不断增加而大幅提高读取速度。
-
数据安全 - 因为副本可以暂停复制过程,所以在副本上运行备份服务不会损坏对应的源数据,这一点是可能的。
-
分析 - 可以在源上创建实时数据,同时可以分析该信息,而不会影响源的性能。
-
远程数据分发 - 您可以使用复制为远程站点创建一个本地数据副本,以便使用,而无需永久访问源。
有关如何在这样的场景中使用复制的信息,请参阅 Section 19.4, “Replication Solutions” 。
MySQL 9.0 支持不同的复制方法。传统方法基于从源二进制日志中复制事件,需要源和副本之间的日志文件和位置同步。基于全局事务标识符 (GTID) 的较新方法是事务性的,因此不需要使用日志文件或这些文件中的位置,这极大地简化了许多常见的复制任务。只要源上提交的所有事务也已应用于副本,使用 GTID 的复制就能够保证源和副本的一致性。有关 GTID 和基于 GTID 的 MySQL 复制的更多信息,请参阅 Section 19.1.3, “Replication with Global Transaction Identifiers” 。有关使用二进制日志文件位置的复制的信息,请参阅 Section 19.1, “Configuring Replication” 。
MySQL 中的复制支持不同类型的同步。原始同步类型是单向异步复制,其中一台服务器充当源服务器,而其他一台或多台服务器充当副本。这与 synchronous 复制形成对比,后者是 NDB 集群的一个特点(参见 Chapter 25, MySQL NDB Cluster 9.0 )。在 MySQL 9.0 中,除了内置的异步复制外,还支持半同步复制。通过半同步复制,在源服务器上执行的提交会在返回到执行事务的会话之前阻塞,直到至少有一个副本确认它已接收并记录事务事件;参见 Section 19.4.10, “Semisynchronous Replication” 。MySQL 9.0 还支持延迟复制,因此副本故意比源服务器延迟至少指定的时间量;参见 Section 19.4.11, “Delayed Replication” 。对于需要 synchronous 复制的情况,请使用 NDB 集群(参见 Chapter 25, MySQL NDB Cluster 9.0 )。
为服务器之间设置复制有很多解决方案,最佳方法取决于数据的存在和正在使用的引擎类型。有关可用选项的更多信息,请参阅 Section 19.1.2, “Setting Up Binary Log File Position Based Replication” 。
复制格式有两种核心类型, 基于语句的复制 (SBR)(复制整个 SQL 语句)和基于行的复制 (RBR)(仅复制已更改的行)。还可以使用第三种类型,即混合式复制 (MBR)。有关不同复制格式的更多信息,请参阅 Section 19.2.1, “Replication Formats” 。
复制通过许多不同的选项和变量进行控制。有关更多信息,请参阅 Section 19.1.6, “Replication and Binary Logging Options and Variables” 。可以对复制拓扑应用其他安全措施,如 Section 19.3, “Replication Security” 中所述。
你可以使用复制来解决许多不同的问题,包括性能、支持不同数据库的备份以及作为减轻系统故障风险的较大解决方案的一部分。有关如何解决这些问题的信息,请参阅 Section 19.4, “Replication Solutions” 。
有关复制过程中不同的数据类型和语句的处理方式的注释和提示,包括复制功能、版本兼容性、升级以及潜在问题及其解决方案的详细信息,请参阅 Section 19.5, “Replication Notes and Tips” 。有关 MySQL 复制新手常问的一些问题的答案,请参阅 Section A.14, “MySQL 9.0 FAQ: Replication” 。
有关复制实现、复制工作方式、二进制日志的流程和内容、后台线程以及用于决定如何记录和复制语句的规则的详细信息,请参阅 Section 19.2, “Replication Implementation” 。