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

news/2024/9/21 16:23:08/文章来源:https://www.cnblogs.com/vipstone/p/18369635

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. 容错性:即使主服务器发生故障,至少有一个从服务器拥有最新的数据,从而减少了数据丢失的风险。

缺点

  1. 性能开销大:主库需要等待所有从库的响应,这会导致事务提交的延迟增加,尤其是在从库数量较多或网络状况不佳时,性能下降明显。
  2. 单点故障风险:如果一个从库出现故障,可能会导致整个系统的阻塞,因为主库需要等待所有从库的确认。

3.3 半同步复制

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

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

优点

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

缺点

  1. 性能波动风险:在网络延迟较高或从库负载较大的情况下,可能会导致主库等待从库确认的时间过长,从而影响性能。
  2. 配置复杂:相比异步复制,配置和管理稍微复杂一些。

4.小结

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

课后思考

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784360.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一汽集团数据专家分享:实时数据技术在汽车行业的应用与实践经验

在当今快速变化的商业环境中,数据的实时性和准确性是企业制胜的关键。然而,数据孤岛、数据分散、处理时效差等难题却成为制约企业发展的瓶颈。本次分享将围绕实时数据技术在汽车行业的应用与实践经验分享展开【导读】在当今快速变化的商业环境中,数据的实时性和准确性是企业…

php5.6安装redis扩展

参考:https://www.cnblogs.com/q35455075/p/14110914.html1.下载 选择php_redis-2.2.5-5.6-ts-vc11-x64.zip和php_igbinary-1.2.1-5.5-ts-vc11-x64.zip 下载地址: http://windows.php.net/downloads/pecl/releases/redis/2.2.7/ http://windows.php.net/downloads/pecl/relea…

AP9195 7-24V高效率、高精度的升压型大功率 LED 照明灯与恒流驱动控制芯片方案

概述 AP9195 是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。 AP9195 内置高精度误差放大器,固 定关断时间控制电路,恒流驱动电路等, 特别适合大功率、多个高亮度 LED 灯串的 恒流驱动。 AP9195 通过调节外置的电流采样电 阻,能控制高亮度 LED 灯的驱动电流,使…

DC-6

靶机介绍靶机下载地址:https://download.vulnhub.com/dc/DC-6.zip 环境搭建下载之后,解压,使用vmware导入或者virtualbox导入都可以,但注意要保证与你的攻击机在同一网段下,vmware要使用最新版kali攻击机:192.168.98.136 靶机渗透 信息收集 扫描主机 arp-scan -l​​靶机i…

自动化测试是什么?为何选择 Apifox 作为自动化测试工具

什么是自动化测试? 自动化测试就是利用专门的软件工具来执行测试用例,并将实际结果与预期结果进行比对的过程。与手动测试相比,自动化测试能够大大提高测试效率,降低人为错误,增加测试覆盖率,同时还能节省大量时间和成本。举个“栗子”,如果你需要反复测试一个有上百个输…

真去送了外卖的程序员,来聊聊他眼中的《逆行人生》丨编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。我们请来一位真的去体验了送外卖的程序员,请他聊聊他眼中的《逆行人生》。本期节目,我们会围绕这部电影的真实性和一…

redhat8 rhel8 启动grub损坏修复

环境:redhat8.4 RHEL8.4 服务器:华为G560 问题描述:调整了/etc/default/grub文件,重新生成/boot/grub2/grub.cfg导致机器启动失败,直接进入了rescue模式 解决方案: 启动到如下界面 选择c进入grub命令界面 可以使用ls命令去查看驱动器的情况 (hd0) 是第一个硬盘。 (hd0,ms…

Easyadmin的安装流程

应用环境: 1.phpStudy 8.1.1.3 2.WNMP:Windows10 + Nginx1.15.11 + MySql5.7 + PHP7.2.9nts 框架版本: 1.ThinkPHP6.0 2.layui2.9.x 3.Echarts5.51 流程步骤: 1.开启phpStudy 必要环境后,创建本地网站目录 2.将本地目录指向public后,填写好伪静态规则:location / {  …

图片相似度对比SSIM和PHash

选择最准确的图像对比算法取决于你的具体需求和应用场景。不同的算法在不同的场景下表现可能不同。以下是一些常见的图像对比算法及其适用场景: 1. 结构相似性 (Structural Similarity Index, SSIM)描述: SSIM 是一种用来衡量两张图像之间的相似度的指标,它考虑了亮度、对比度…

图论杂题 做题笔记

在这个随笔中,会有笔者的一些做题笔记,包括但不限于图论的思想、解题技巧、代码实现等。在这个随笔中,会有笔者的一些做题笔记,包括但不限于图论的思想、解题技巧、代码实现等。

图论杂题

在这个随笔中,会有笔者的一些做题笔记,包括但不限于图论的思想、解题技巧、代码实现等。在这个随笔中,会有笔者的一些做题笔记,包括但不限于图论的思想、解题技巧、代码实现等。

《DNK210使用指南 -CanMV版 V1.0》

第二十章 machine.I2C类实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210…