MySQL主从同步如何保证数据一致性?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL主从同步如何保证数据一致性?

MySQL 主从同步是 MySQL 集群方案中的一种,也是实现难度最低的一种。

然而,现在的面试都不问 MySQL 主从同步原理了,而是开始问主从同步怎么保证数据一致性问题了。

所以,今天就给大家安排上了。

1.什么是数据一致性?

数据一致性是指在一个系统中,数据在不同的部分、不同的时间点,以及不同的操作之间保持一致的状态。

数据一致性通常体现在以下几点:

  1. 数据一致性:确保数据的完整性意味着数据在存储和传输过程中没有被损坏或丢失。这包括数据的准确性、完整性和有效性。例如,在一个电商系统中,商品的库存数量应该是准确的。如果一个用户购买了一件商品,库存数量应该相应地减少。如果库存数量显示不正确,就会导致数据不一致。
  2. 事务一致性:在数据库系统中,事务是一组操作的集合,这些操作要么全部成功执行,要么全部回滚。事务一致性确保在一个事务中对数据的修改在事务提交后对所有用户都是可见的,并且如果事务失败,数据将恢复到事务开始之前的状态。例如,在一个在线预订系统中,用户预订了一个酒店房间,系统应该确保这个房间在预订期间不能被其他用户预订。如果出现多个用户同时预订同一个房间的情况,就会导致数据不一致。
  3. 多副本一致性:在分布式系统中,数据通常会存储在多个副本中,以提高系统的可用性和性能。多副本一致性确保不同副本之间的数据保持一致。例如,在一个云存储服务中,用户上传了一个文件,这个文件会被存储在多个数据中心的服务器上。如果用户对文件进行了修改,云存储服务应该确保所有副本都被更新,以保证用户在任何地方访问文件时都能看到最新的版本。
  4. 时间一致性:时间一致性要求数据在不同的时间点上保持一致,这包括数据的时效性和顺序性。例如,在一个股票交易系统中,交易订单的处理应该按照时间顺序进行。如果订单的处理顺序出现错误,就会导致交易数据不一致。

PS:我们本文主要讨论的是多副本在同一时间上的数据一致性问题。

2.主从复制

MySQL 主从复制是一种将 MySQL 主数据库的数据,同步到其他的数据库的一种机制,从而实现数据的冗余备份和负载均衡,平行扩展了数据库的查询能力。

主从数据库基本概念:

  1. 主数据库(Master):主数据库是数据的主要来源,负责接收和处理所有的写操作(INSERT、UPDATE、DELETE 等)。主数据库将所有的写操作记录到二进制日志(Binary Log)中,这些日志记录了数据库的变更历史。
  2. 从数据库(Slave):从数据库通过复制主数据库的二进制日志来同步数据。从数据库可以处理读操作(SELECT),从而分担主数据库的负载。

MySQL 主从复制流程如下:
image.png
它的主要执行流程如下:

  1. 主数据库接收到一个写操作(如 INSERT、UPDATE、DELETE)时,会将这个操作记录到二进制日志(Binary Log)中,将数据修改的操作按顺序记录下来。
  2. 从数据库 IO 线程会自动连接主服务,从二进制中读取同步数据,记录到中继日志(Relay Log)中。
  3. 从数据库的 SQL 线程会定期从中继日志中获取同步数据,写入到从数据库中。

    3.MySQL主从同步类型

    MySQL 主从同步方式有以下三种:
    image.png

    3.1 异步复制

    异步复制默认的主从同步复制模式,在这种模式下,主服务器提交事务后立即返回客户端,无需等待从服务器确认是否成功接收并应用了事务,从服务器会在后台独立地接收并应用事务日志。

异步同步流程如下(红色部分为主要执行流程):
image.png

优点

  1. 性能:异步复制模式下,主服务器的写操作不会因为等待从服务器的确认而被阻塞,因此可以提供更高的写入吞吐量。
  2. 简单:配置和管理相对简单。
  3. 成本:不需要额外的硬件资源支持,因为不需要高速的网络连接来保证同步。

    缺点

    数据丢失问题:在主服务器故障的情况下,可能存在数据未完全同步到从服务器的情况,导致数据丢失或不一致。

    3.2 同步复制

    同步复制是一种最为严格的复制模式,它要求主服务器在提交一个事务之前,必须等待所有从服务器确认确认接收到并应用了事务之后,主服务器才会向客户端返回事务提交成功的消息

同步复制执行流程如下:
image.png

优点

  1. 数据一致性:提供了更高的数据一致性保障,因为主服务器必须等待从服务器确认才能完成事务提交。
  2. 容错性:即使主服务器发生故障,至少有一个从服务器拥有最新的数据,从而减少了数据丢失的风险。

    缺点

  3. 性能开销大:主库需要等待所有从库的响应,这会导致事务提交的延迟增加,尤其是在从库数量较多或网络状况不佳时,性能下降明显。

  4. 单点故障风险:如果一个从库出现故障,可能会导致整个系统的阻塞,因为主库需要等待所有从库的确认。

    3.3 半同步复制

    半同步复制是一种折衷方案,它结合了异步复制的高性能和同步复制的高可靠性。在半同步复制模式下,主服务器在提交一个事务之前,需要等待至少一个从服务器确认接收到该事务的日志,但不需要等待从服务器完成应用。

半同步执行流程如下:
image.png

优点

  1. 数据一致性较好:相比异步复制,提供了更好的数据一致性保障。
  2. 性能影响较小:相比同步复制,半同步复制的性能开销较小,因为只需要等待一个从库的确认。
  3. 灵活性较高:可以根据需要调整等待的从服务器数量,以适应不同的性能和可靠性需求。

    缺点

  4. 性能波动风险:在网络延迟较高或从库负载较大的情况下,可能会导致主库等待从库确认的时间过长,从而影响性能。

  5. 配置复杂:相比异步复制,配置和管理稍微复杂一些。

    4.小结

    因此,想要保证数据完全一致性需要使用同步复制,但这会牺牲一定的性能;因此在生产环境我们可以使用半同步保证较好的数据一致性即可;而默认的异步方式实现最简单、性能最好,但可能存在数据不一致的风险,虽然发生的概率极低(生产环境也可以使用)。

    课后思考

    如何实现MySQL半同步复制和同步复制呢?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
19 1
|
27天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
162 11
|
1月前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
48 6
|
2月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
42 3
|
2月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 缓存 关系型数据库
MySQL主从同步如何操作?
随着业务增长,单台MySQL服务器难以应对高并发访问和潜在的故障风险。主从同步(Master-Slave)通过读写分离提升数据库处理能力,具备多项优势:读写分离减轻主数据库压力、支持一主多从增强扩展性与高可用性、以及数据备份确保容灾恢复。MySQL利用binlog实现主从数据同步,记录所有写操作,不包含查询。binlog有三种格式:Statement(基于SQL语句)、Row(基于行更改)、Mixed(结合前两者优点)。主从复制涉及三个关键线程:主库的binlog dump thread和从库的I/O thread与SQL thread。
MySQL主从同步如何操作?
|
2月前
|
SQL 存储 关系型数据库
实时计算 Flink版产品使用问题之同步MySQL多张表的过程中,内存释放依赖于什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方法
MySQL主从同步延迟原因与解决方法
373 0
|
2月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6