文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL 主从同步原理

2023-09-01 16:02

关注

当涉及到高可用性、负载均衡以及数据备份的需求时,MySQL 主从同步技术是一个非常重要的解决方案。本文将详细介绍 MySQL 主从同步的原理、配置和示例。

一、什么是 MySQL 主从同步?


MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。

主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。

主从同步有以下几个关键概念:

主服务器(Master):

主服务器是原始数据库系统,所有的写操作都在主服务器上进行。主服务器负责将数据更改记录到二进制日志中,并将其传输给从服务器。

从服务器(Slave):

从服务器是主服务器的副本,它接收主服务器上的二进制日志,并将其应用到自己的数据库中。从服务器只能进行读操作。

二进制日志(Binary Log):

二进制日志是主服务器上记录所有数据更改操作的日志文件。它包含了插入、更新和删除等操作的详细信息。

中继日志(Relay Log):

中继日志是从服务器上的一个日志文件,它存储了从主服务器接收到的二进制日志的副本。从服务器会读取中继日志,并将其中的操作应用到自己的数据库中。

二、主从同步应用场景

数据备份和灾难恢复:

通过主从同步,可以将主服务器上的数据实时复制到一个或多个从服务器上。这样,在主服务器发生故障或数据丢失的情况下,可以快速切换到从服务器,实现灾难恢复和数据的备份。

高可用性:

高可用性:通过主从同步,从服务器可以接受读请求,提供读负载均衡,减轻主服务器的压力。如果主服务器发生故障,可以将从服务器提升为新的主服务器,确保系统的持续可用性。

负载均衡:

负载均衡:主从同步可以使读请求分布到多台从服务器上,从而实现负载均衡。通过将读操作转发到从服务器,可以提高整个系统的处理能力和性能。

分布式数据处理:

分布式数据处理:主从同步也为分布式数据处理提供了基础支持。通过将数据复制到不同的节点,可以在多个从服务器上同时进行数据处理,提高系统的并发性能。

数据分析和报表生成:

数据分析和报表生成:通过在从服务器上进行数据分析和报表生成,可以避免对主服务器造成额外的负担,并保证在线事务处理的高效性。

地理位置灵活性:

地理位置灵活性:通过在不同地理位置部署主从服务器,可以实现数据在不同地区的复制和就近访问。这对于全球化业务、跨区域合作等场景非常有用。

综上所述,主从同步提供了数据备份、灾难恢复、高可用性、负载均衡、分布式数据处理、数据分析和报表生成等多种优势

它是一种重要的技术手段,可以帮助提高数据库系统的稳定性、性能和可靠性。无论是在大型企业应用还是互联网应用中,主从同步都发挥着关键作用。

三、MySQL实现主从同步有以下几种常见方式:

基于二进制日志的复制(Binary Log Replication):

这是MySQL最常见和默认的主从同步方式。主服务器将执行的所有数据变更操作记录在二进制日志(binary log)中,从服务器连接到主服务器并获取二进制日志的内容,然后将其应用到从服务器上,实现数据的同步。

半同步复制(Semi-Synchronous Replication):

半同步复制是一种改进的主从同步方式,它在主服务器将数据变更写入二进制日志后,要求至少一个从服务器确认已经收到并应用了这些变更,才会给客户端返回提交完成的消息。这提高了数据的可靠性和一致性。

组复制(Group Replication):

组复制是MySQL 5.7版本引入的一种基于原生插件的高可用性解决方案。它允许多个服务器组成一个组(Group),其中一个服务器作为主服务器,其他服务器作为从服务器。组中的服务器之间通过组间通信协议进行数据同步,实现主从同步和高可用性。

GTID复制(GTID Replication):

GTID(Global Transaction ID)是MySQL引入的一种全局事务标识,用于唯一标识每个事务。基于GTID的复制使用GTID来跟踪和复制事务,而不是依赖于二进制日志的位置信息。这样可以更方便地管理和维护主从关系,特别是在进行故障转移和添加/删除节点时。

以上是MySQL实现主从同步的常见方式,选择适合的方式应根据具体需求、性能要求和可用工具等因素来决定。

3.1 基于二进制日志的复制(Binary Log Replication)

基于二进制日志的复制是MySQL中最常见和默认的主从同步方式之一。它通过将主服务器上的数据变更操作记录在二进制日志中,并将这些日志传输给从服务器,从而实现数据在主从服务器之间的同步。

3.1.1 二进制日志的复制具体流程:

二进制日志的复制是 MySQL 中实现数据同步的关键机制,以下是它的具体流程:

主服务器(Master)生成二进制日志:

当主服务器上执行了数据变更操作(如插入、更新或删除),它会将这些操作以 SQL 语句或行级别事件的形式记录在二进制日志中。二进制日志包含了主服务器上所有的数据变更历史。

从服务器(Slave)连接到主服务器:

从服务器会与主服务器建立一个复制连接,通过网络传输数据。从服务器需要指定主服务器的地址、端口号、用户名和密码等信息来进行连接。

主服务器发送二进制日志事件:

一旦从服务器成功连接到主服务器,主服务器就会开始向从服务器发送二进制日志事件。这些事件可以是完整的 SQL 语句,也可以是行级别的数据变更事件。

从服务器接收并写入中继日志(Relay Log):

从服务器接收到主服务器发送的二进制日志事件后,会将其写入一个称为中继日志(Relay Log)的文件中。中继日志保存了主服务器发送过来的二进制日志事件的副本。

从服务器重放中继日志:

从服务器会解析中继日志中的二进制日志事件,并根据其内容在从服务器上执行相应的数据变更操作,以使从服务器上的数据与主服务器保持一致。

从服务器向主服务器反馈复制信息:

从服务器在执行数据变更操作时,会生成一个称为复制事件(Replication Event)的记录,并将其更新到主服务器上的复制信息表中。这个复制事件包含了从服务器接收和应用二进制日志事件的相关信息。

定期进行心跳检查:

主服务器和从服务器之间会定期进行心跳检查,以确保连接的正常和可靠性。如果从服务器在一定时间内没有收到来自主服务器的二进制日志事件,或者发生连接错误,它将尝试重新连接主服务器并继续复制过程。

通过以上步骤,主服务器和从服务器之间建立起了复制关系,并且可以保持数据的一致性。主服务器上的数据变更操作会被记录在二进制日志中,并通过网络传输给从服务器,从服务器则根据接收到的二进制日志事件来执行相应的数据变更操作,实现数据的复制和同步。这种复制机制可以支持单向复制(主到从)、链式复制(主到从到从)以及环形复制等不同的拓扑结构。

基于二进制日志的复制具有灵活性、可靠性、高性能和兼容性等特点。它可以根据需要选择是否同步所有数据库和表,也可以选择指定同步的数据库和表。通过将数据变更以事件形式记录在二进制日志中,可以确保数据变更的持久性和可恢复性。相对于传输大量的SQL语句,只传输二进制日志可以节省网络带宽,提高同步性能。同时,它支持多种备份和恢复策略,并且可以与其他复制方式结合使用,如GTID复制。

需要注意的是,基于二进制日志的复制是异步的,从服务器上的数据可能会有一定延迟,不一定实时与主服务器保持完全同步。如果需要更高的数据一致性和可用性,可以考虑使用半同步复制或组复制。基于二进制日志的复制同时支持SQL语句复制和行的复制两种方式,可以根据需求选择使用哪种方式进行数据同步。这个选择通常通过从服务器的配置参数进行设置,以满足不同的应用需求。

总之,基于二进制日志的复制提供了灵活性、可靠性和高性能,并且同时支持SQL语句复制和行的复制,以满足不同的数据同步需求。

3.1.2 二进制日志的复制三种复制方式:

1、基于语句的复制(Statement-Based Replication,SBR):

这是最常见的二进制日志复制方式。在 SBR 中,主服务器将执行的数据变更操作以 SQL 语句的形式记录在二进制日志中,并且将完整的 SQL 语句传输给从服务器。从服务器接收到 SQL 语句后,会在本地执行相同的 SQL 语句来实现数据同步。

2、基于行的复制(Row-Based Replication,RBR):

在 RBR 中,主服务器将每个数据变更操作转换成行级别的事件,记录在二进制日志中。从服务器在同步时解析并应用这些行级别的事件,逐行更新或插入数据,以保持与主服务器的数据一致性。RBR 可以更精确地复制数据变更操作,特别是对于那些基于函数、触发器或存储过程等的操作更为有效。

3、混合模式复制(Mixed Mode Replication):

混合模式复制结合了基于语句的复制和基于行的复制。在混合模式下,默认使用基于语句的复制方式,但对于一些不能通过 SQL 语句准确重现的数据变更操作,将自动切换为基于行的复制方式。这种方式提供了更大的灵活性和兼容性。

这些复制方式各有优劣,可以根据具体的需求和场景选择合适的方式。基于语句的复制通常是默认的选择,它简单且效率高,适用于大多数情况。基于行的复制则更加精确,但会产生更多的二进制日志数据和网络传输量。混合模式复制结合了两者的优点,在大多数情况下能够提供更好的性能和灵活性。

3.1.2.1 基于语句的复制(Statement-Based Replication,SBR)

基于语句的复制(Statement-Based Replication,SBR)是 MySQL 中常用的二进制日志复制方式之一,其核心思想是将主服务器执行的数据变更操作以 SQL 语句的形式记录在二进制日志中,并将完整的 SQL 语句传输给从服务器进行执行。以下是 SBR 的详细说明:

主服务器执行数据变更操作:

当在主服务器上执行数据变更操作(如插入、更新或删除),它会将这些操作以 SQL 语句的形式记录在二进制日志中。例如,如果在主服务器上执行了一条 SQL 语句进行数据插入操作,那么这个 SQL 语句将会被记录在二进制日志中。

二进制日志传输至从服务器:

主服务器会将生成的二进制日志传输给从服务器,以便从服务器能够获取主服务器上的数据变更操作。

从服务器解析并执行 SQL 语句:

从服务器接收到主服务器传输的二进制日志后,会逐条解析其中的 SQL 语句,并在本地执行这些 SQL 语句来实现数据同步。从服务器会按照与主服务器相同的顺序执行 SQL 语句,以保持数据的一致性。

主从服务器保持一致性:

通过不断地获取并执行主服务器上的二进制日志中的 SQL 语句,从服务器可以实时地保持与主服务器上的数据一致性。如果在主服务器上执行了一个更新操作,从服务器将会收到相应的 SQL 语句并在本地进行执行,以使从服务器上的对应数据保持同步。

需要注意的是,基于语句的复制要求主服务器上的数据变更操作能够完全以 SQL 语句的形式记录在二进制日志中。对于大多数普通的 CRUD 操作,这种复制方式都能良好地工作。但对于一些特殊的情况,如使用非确定性函数、触发器或存储过程等,可能会导致无法准确重现操作,从而可能出现主从数据不一致的情况。

尽管基于语句的复制存在一些潜在的限制,但它被广泛应用于 MySQL 数据库复制中,因为它简单、高效且易于实现。如果应用程序没有涉及到复杂的操作和特性,基于语句的复制通常是首选的复制方式。

3.1.2.2 基于行的复制(Row-Based Replication,RBR)

基于行的复制(Row-Based Replication,RBR)是 MySQL 中的一种二进制日志复制方式,它以行级别的数据变更事件为单位进行复制。相比于基于语句的复制(Statement-Based Replication,SBR),RBR 提供了更精确和准确的数据复制,并且能够处理更多复杂的操作情况。以下是 RBR 的详细说明:

主服务器执行数据变更操作:

当在主服务器上执行数据变更操作(如插入、更新或删除),它会记录发生变更的具体行数据。例如,在进行插入操作时,主服务器会记录完整的插入行数据。

二进制日志传输至从服务器:

主服务器会将生成的二进制日志包含行级别数据变更事件的部分传输给从服务器,以便从服务器能够获取主服务器上的数据变更操作。

从服务器解析并应用行数据变更:

从服务器接收到主服务器传输的二进制日志后,会解析其中的行级别数据变更事件,并将这些事件应用到本地的数据库中。从服务器根据接收到的行数据变更事件,对从库中的相应数据进行插入、更新或删除操作,以使从服务器上的数据与主服务器保持一致。

行级别数据复制:

通过行级别的复制,RBR 可以提供更准确和精确的数据复制。它可以捕获到更细粒度的变更,包括部分更新、删除和替代操作。这样可以确保从服务器上的数据与主服务器完全一致。

RBR 的优点是可以处理一些在 SBR 中难以重现的复杂操作场景,例如使用非确定性函数、触发器、存储过程等情况下的数据变更。它能够准确地复制主服务器上的行级别变更,无论是通过 SQL 语句还是通过应用程序直接修改数据。

然而,与基于语句的复制相比,RBR 在网络传输和存储开销上可能会更高,因为它需要传输并记录更多的数据。因此,在设计和配置复制环境时,需要根据实际需求和系统负载来选择适当的复制方式。

总的来说,基于行的复制提供了更准确和精确的数据复制方式,能够处理更复杂的操作情况,但也需要更多的网络传输和存储开销。在需要保证数据一致性和准确性的场景下,可以考虑使用RBR。

3.1.2.3 混合模式复制(Mixed Mode Replication)

混合模式复制(Mixed Mode Replication)是 MySQL 中的一种复制方式,它结合了基于语句的复制(Statement-Based Replication,SBR)和基于行的复制(Row-Based Replication,RBR)的特点。混合模式复制在复制过程中根据情况动态选择使用 SBR 或 RBR,以实现更高效的数据复制。以下是混合模式复制的详细说明:

初始同步使用基于语句的复制:

在设置混合模式复制时,通常会先进行初始同步阶段。在初始同步阶段,使用基于语句的复制,将主服务器上执行的数据变更操作记录并传输给从服务器进行执行。这是因为基于语句的复制简单且高效,在初始同步阶段能够更快地将数据复制到从服务器上。

动态选择复制方式:

在初始同步完成后,MySQL 会根据具体情况动态选择使用 SBR 还是 RBR 进行后续的复制。

基于语句的复制和基于行的复制动态切换:

在混合模式复制中,MySQL 可以根据具体的数据变更操作选择使用 SBR 或 RBR,甚至可以在一次复制中动态地切换。这样可以根据操作的复杂度和需求选择更适合的复制方式,提供更高效的数据复制。

通过混合模式复制,MySQL 结合了基于语句的复制和基于行的复制的优点。它能够在初始同步阶段快速地复制数据,而在后续的复制过程中根据具体情况灵活选择复制方式,保证数据的准确性和一致性。这种方式可以在一定程度上解决基于语句的复制和基于行的复制各自的局限性,并提供更高效的数据复制方案。

四、MySQL主从同步实现数据备份过程

数据备份是指将主服务器上的数据实时复制到一个或多个从服务器上,以防止主服务器发生故障或数据丢失时能够进行数据恢复。下面展开说明数据备份的具体应用过程:

配置主从复制:首先,需要在主服务器和从服务器上配置主从复制。这需要确保主服务器上的数据库引擎支持主从同步,并设置主服务器为主节点,从服务器为从节点。

同步数据复制:一旦主从复制配置完成,主服务器上的数据变动会被实时记录并发送到从服务器。这些变动可能包括插入、更新和删除操作等。从服务器会接收这些变动并进行数据复制,确保从服务器上的数据与主服务器同步。

数据传输方式:数据传输可以通过多种方式实现,例如基于日志文件的传输方式(如二进制日志复制)、基于行级别变更的传输方式(如基于主从复制协议的变更传输方式)等。具体的选择取决于数据库引擎和应用需求。

数据完整性和一致性:在数据备份过程中,主从服务器之间必须保持数据的完整性和一致性。这意味着复制的数据必须与主服务器上的数据保持一致,而且所有的写操作必须按照特定的顺序进行。

定期检查和监测:数据备份过程中,需要定期检查和监测主从服务器的状态和同步情况。可以通过监控工具或日志记录来确保主从复制的健康运行,并及时发现问题并进行修复。

故障恢复:当主服务器发生故障或停机时,可以将从服务器提升为新的主服务器。这样,系统可以在短时间内恢复正常运行,而无需丢失任何数据。

数据备份是一项关键的任务,对于数据安全和业务连续性至关重要。它可以通过主从复制技术实现,确保数据的可靠性和可用性。

为什么主库负责写,从库负责读?

如果主库与从库都负责读跟写,那么数据同步容易错乱。主库负责写,然后将数据同步到从库可以更好的保证数据一致性

大部分的业务,写的功能比较少,大部分是读的功能,所以主库一般是一台,从库有很多台。

在日常项目中,当我们写入数据后,再去查数据,当时查不到,可能导致的问题就是主从同步有数据的延迟,写入的是主库,当我们查数据时,查的是从库。

解决同步延迟的问题,是数据库运维来把控的,不需要我们测试人员来解决。

相关文章:

MySQL主从同步配置_做测试的喵酱的博客-CSDN博客

来源地址:https://blog.csdn.net/qq_39208536/article/details/127057991

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯