MySQL 复制的工作原理?

2024年8月29日 | 阅读 8 分钟

在本文中,我们将讨论 MySQL复制 的工作原理。但在讨论其工作原理之前,我们必须了解复制及其类型。

什么是复制?

将数据从一个 MySQL 数据库(源或主服务器)复制到一个或多个 MySQL 数据库(副本或从服务器)的过程在 MySQL 中称为 复制。我们可以为多种用途创建数据的冗余副本,包括数据备份、故障转移和负载均衡。MySQL 中的复制是提高数据库可用性、可靠性和性能的一项重要功能。

复制类型

MySQL 中有几种复制类型。一些主要的复制类型如下:

  • 单向复制:单向复制涉及一个主服务器和一或多个从服务器。数据沿单个路径从主服务器流向从服务器。这是最常用的复制类型,可实现读扩展、数据冗余和灾难恢复功能。
  • 主-主复制:此复制类型涉及同时使用两个或多个 MySQL 服务器作为主服务器和从服务器。这意味着任何服务器都可以接受读写操作。它通常用于负载均衡读写操作以及地理上分散的数据库。
  • 组复制:它最近被添加到 MySQL 中。组复制旨在实现高可用性。当多个服务器在组复制配置中协作时,即使发生服务器故障,数据一致性也能得到保证。组复制中使用共识机制来控制服务器职责并同步数据。

复制设置

设置主服务器:我们首先在主服务器上设置 MySQL 服务器,以启用二进制日志记录。此外,我们使用启用复制的选项启动 MySQL 服务器,并允许主服务器进行复制。

  • 设置从服务器:在这里,我们需要设置 从服务器,使其通过连接到主服务器来复制主服务器的记录。我们可以设置其他参数,例如复制凭据以及主服务器的主机名或 IP 地址。

复制的一个关键因素是 二进制日志。主服务器上对数据的每一次修改都会记录在其中。反之,中继日志 由从服务器使用。它们用于将从主服务器获取的二进制日志事件应用于从服务器并保存。为了维护复制的完整性和可靠性,需要对其进行监控和维护。我们还可以使用第三方解决方案和 MySQL 的内置复制跟踪等工具来监控复制过程并了解问题。

主-从关系

在 MySQL 复制中,主-从关系 是一个基本概念。在复制设置中,它概述了数据库服务器的职责和义务。

主服务器

在复制配置中,主服务器 是主要的数据库服务器。它是该过程的关键。主服务器的主要功能如下:

  • 数据源:主服务器是实际数据所在的服务器。所有数据更改,包括模式更改和 INSERT、UPDATEDELETE 操作,都在主服务器上执行。
  • 二进制日志:主服务器在二进制日志中保留所有数据库更新的按时间顺序记录。复制过程依赖于此二进制日志。修改以低级二进制数据或 SQL 表达式的形式表示。
  • 复制服务器 ID:在复制配置中,每个 MySQL 服务器都被分配一个唯一的服务器 ID。通过其唯一的服务器 ID,主服务器用于向从服务器进行标识。
  • 复制配置:必须更改主服务器的配置以启用复制。配置服务器 ID、复制用户凭据和二进制日志记录是重要的设置变量。
  • 复制权限:从服务器 需要从主服务器获得特定的复制权限。这包括访问数据库的权限、复制数据的能力以及读取二进制日志的能力。

从服务器

复制配置中的次要服务器称为 从服务器副本服务器。它们接收主服务器的数据修改并进行复制。从服务器的重要功能如下:

  • 数据复制:主服务器的数据被复制到 从服务器。它们复制数据以确保其与主服务器上的数据一致。
  • 二进制日志和中继日志:二进制日志中继日志 是从服务器使用的两种日志代码。事件记录在中继日志中,I/O 线程读取主服务器上的二进制日志。中继日志中的修改最终通过 SQL 线程应用于本地数据库。

复制过程

主服务器上的数据修改

主服务器上的数据修改启动复制过程。这些操作可以包括任何数据更改操作,如 INSERT、UPDATEDELETE

在二进制日志中记录更改

一旦在 主服务器 上执行了数据修改,就会在二进制日志中记录该修改。二进制日志中包含所有数据库修改的按时间顺序的记录。这些修改以一系列 SQL 语句或低级二进制数据的形式表示。

这对复制至关重要,因为二进制日志是数据更改的真实来源。每次数据更新都会在二进制日志中记录一个事件。

从服务器请求数据

  • 从服务器 会定期与主服务器建立连接,以获取二进制日志的副本。此连接使用 MySQL 复制用户的凭据建立。
  • 从服务器处理的最新二进制日志位置会告知主服务器。此位置有时称为 “位置”“日志位置”,它为二进制日志中发生的每个显示这些修改的事件提供了唯一标识符。
  • 这对复制至关重要,因为二进制日志是数据更改的真实来源。每次数据更新都会在二进制日志中记录一个事件。

将二进制日志事件发送到从服务器

  • 当主服务器收到从服务器的连接请求时,它开始向从服务器发送二进制日志事件。它从从服务器指定的起始位置开始发送事件。
  • 二进制日志事件包含由主服务器修改生成的数据修改语句或二进制数据。从服务器按顺序接收这些事件。

在从服务器上应用二进制日志事件

  • 收到二进制日志事件后,从服务器将其本地记录在中继日志中。事件以中间格式存储在此中继日志中。它们保持从主服务器接收事件的顺序。

为了将这些事件应用于本地数据库,从服务器的两个主要线程会协同工作:

  • I/O 线程(复制 I/O 线程):此线程负责从主服务器的二进制日志中读取事件,并将它们写入从服务器的中继日志。
  • 复制 SQL 线程(SQL 线程):此线程从 Relay Log 读取事件,并将二进制记录应用于本地数据库或执行 SQL 操作。通过这样做,从服务器的数据被保持与主服务器同步。

复制过滤器和延迟

可以在从服务器上设置 复制过滤器,以选择性地复制特定的数据库或表。这允许我们控制哪些记录被复制到从服务器。

一种向复制过程添加时间延迟的方法是在从服务器上启用延迟复制。这有助于防止来自主服务器的意外或恶意数据修改立即传播。

设置复制过滤器

  • 启用延迟复制

监控和故障排除

必须持续监控复制过程,以确保其可靠和健康。一系列 MySQL 实用程序和函数,例如 SHOW SLAVE STATUS,提供了有关复制状态的有用指标和信息,包括从服务器日志位置和错误消息。

在发生复制故障时,需要进行故障排除以查找和修复可能导致复制过程中断的问题。模式不一致、网络问题和数据冲突是常见挑战。

  • 检查复制状态
  • 排查复制故障

安全注意事项

使用 SSL 加密主服务器和从服务器之间的数据对于安全的复制至关重要。此外,设置网络安全和防火墙,只允许授权主机访问复制端口。

复制的优点

复制有几个优点。复制的一些主要优点如下:

  • 高可用性

MySQL 复制的一个主要优点是提高了高可用性。通过维护一个或多个从服务器,我们可以确保数据得到备份。万一主服务器发生故障,其中一个从服务器可以提升为主服务器,从而减少停机时间并保证数据库的持续运行。

  • 负载均衡

通过复制,我们可以将 读流量 分散到多个从服务器。这对于具有大量读取工作负载的应用程序非常有用。主服务器可以通过将读取操作转移到从服务器来处理写入任务,从而提高整体数据库性能和响应时间。

  • 数据冗余

复制提供了数据冗余。每个从服务器维护主服务器数据的同步副本。这种冗余可以防止可能导致数据丢失的意外数据删除、软件错误和设备故障。它确保我们拥有最新、可靠的数据副本。

  • 可扩展性

水平扩展 由复制支持。我们可以添加更多从服务器来处理更多的读取流量或支持更多的用户。这种可扩展性是经济高效的,并有助于满足应用程序不断增长的需求。

  • 一致性和数据完整性

当两台服务器同时尝试更新同一数据时,主-主复制 系统之间可能会发生冲突。MySQL 包含用于识别此问题的功能,例如自动增量、偏移量、基于行的复制等。