当前位置: 首页 > news >正文

MySQL的事务特性和高可用架构

一、事务的 ACID 特性

事务(Transaction)是数据库中一组不可分割的操作集合,ACID 特性是保证数据可靠性和一致性的核心原则:

1. 原子性(Atomicity)
  • 定义:事务中的所有操作要么全部成功提交,要么全部失败回滚,不存在 “部分执行” 的中间状态。
  • 举例:转账时,“扣款” 和 “收款” 必须同时完成,若其中一步失败,整个操作需回滚到初始状态,避免 “一方扣钱另一方未到账” 的错误。
  • 实现依赖undo log(回滚日志)。事务执行时,InnoDB 会记录操作的反向逻辑(如 “插入” 对应 “删除”,“更新” 对应 “恢复旧值”),若事务失败,通过undo log撤销已执行的操作。
2. 一致性(Consistency)
  • 定义:事务执行前后,数据库从一个 “一致状态”(满足业务规则和数据约束)转换到另一个 “一致状态”。
  • 举例:转账前后,两个账户的总金额不变;库存扣减后不能为负数;主键不能重复。
  • 保障方式:依赖原子性、隔离性、持久性共同作用,同时需要业务逻辑配合(如代码中添加校验规则)。
3. 隔离性(Isolation)
  • 定义:多个并发事务之间相互隔离,一个事务的操作不会被其他事务干扰,避免 “脏读”“不可重复读”“幻读” 等问题。
  • MySQL 的隔离级别(由低到高):
    • 读未提交(Read Uncommitted):事务可读取其他未提交事务的修改(存在脏读)。
    • 读已提交(Read Committed):事务只能读取其他已提交事务的修改(解决脏读,但可能不可重复读)。
    • 可重复读(Repeatable Read,默认):事务中多次读取同一数据结果一致(通过 MVCC 实现,解决不可重复读)。
    • 串行化(Serializable):事务串行执行(加锁强制隔离,解决幻读,但并发性能极低)。
  • 实现依赖:锁机制(行锁、表锁)和 MVCC(多版本并发控制)。
4. 持久性(Durability)
  • 定义:事务提交后,修改会永久保存到磁盘,即使数据库崩溃(如断电)也不会丢失。
  • 实现依赖redo log(重做日志)。事务提交时,InnoDB 先将修改记录写入redo log并刷盘,再异步将内存中的数据页刷新到磁盘。若崩溃,重启后可通过redo log恢复未刷盘的数据。

二、MySQL 高可用架构

高可用架构的核心目标是减少系统停机时间,确保数据库在故障(如主库宕机、网络中断)时仍能提供服务,主要依赖 “主备一致” 和 “读写分离” 实现。

1. 主备一致(主从复制)

通过主库(Master)与备库(Slave)的数据同步,实现 “故障时快速切换”,避免单点故障。

  • 核心原理:基于 binlog(二进制日志)的异步同步:

    1. 主库执行写操作后,将修改记录到binlog
    2. 备库通过 “IO 线程” 读取主库的binlog,写入本地relay log(中继日志);
    3. 备库的 “SQL 线程” 重放relay log中的操作,实现与主库数据一致。
  • 同步模式

    • 异步复制(默认):主库提交事务后立即返回,不等待备库同步,性能高但可能存在数据延迟(极端情况备库丢失数据)。
    • 半同步复制:主库提交后,需等待至少一个备库确认接收binlog后再返回,平衡性能与数据安全性(延迟略高于异步)。
    • 组复制(MGR):多节点组成集群,事务需多数节点确认后提交,实现强一致性(适合对数据一致性要求高的场景)。
2. 读写分离

基于主备架构,将 “读操作” 分流到备库,“写操作” 集中在主库,提升系统并发能力。

  • 架构组成

    • 主库:处理所有写操作(INSERT/UPDATE/DELETE)和核心读操作(如实时性要求高的查询)。
    • 备库:处理大部分读操作(SELECT),可部署多个备库分担读压力。
    • 中间件:如 MyCat、Sharding-JDBC、ProxySQL,负责自动路由请求(写请求走主库,读请求走备库)。
  • 关键问题与解决

    • 数据延迟:主库写操作同步到备库需要时间,可能导致备库读取到旧数据。
      解决:核心业务读请求强制走主库;使用半同步复制减少延迟;中间件支持 “延迟检测”(如丢弃延迟过高的备库)。
    • 故障切换:主库宕机时,需通过工具(如 MHA、Orchestrator)自动将备库提升为主库,并更新中间件的路由规则。

三、总结

  • ACID 特性是事务可靠性的基石:原子性保证操作 “要么全成,要么全败”;一致性保证数据逻辑正确;隔离性避免并发干扰;持久性保证提交后数据不丢失。
  • 高可用架构通过 “主备一致” 实现数据冗余和故障切换,通过 “读写分离” 分担压力,核心是在 “一致性”“性能”“可用性” 之间找平衡(如异步复制性能高但一致性弱,组复制一致性强但性能略低)。

实际应用中,需根据业务场景(如金融场景需强一致性,互联网场景可容忍轻微延迟)选择合适的隔离级别和高可用方案


文章转载自:

http://BWKSfwwN.txtgy.cn
http://NFulexqo.txtgy.cn
http://YeLpRAHc.txtgy.cn
http://XY0LT3fN.txtgy.cn
http://dPDL6ZFM.txtgy.cn
http://Y96gk4mf.txtgy.cn
http://gP9yJFd8.txtgy.cn
http://6ObXgvoi.txtgy.cn
http://NJIEOuwS.txtgy.cn
http://Dhymzsdv.txtgy.cn
http://Rfxkr0OL.txtgy.cn
http://xB52ft1e.txtgy.cn
http://YMoMyJcN.txtgy.cn
http://jIw3jrei.txtgy.cn
http://uzKWCnOo.txtgy.cn
http://LiObYebr.txtgy.cn
http://A35Atz15.txtgy.cn
http://oIJyMK2Q.txtgy.cn
http://1p2qOmCV.txtgy.cn
http://HE0G8Bq0.txtgy.cn
http://s1ActSOB.txtgy.cn
http://4hyA1Td0.txtgy.cn
http://bUhTiGXz.txtgy.cn
http://kxUoG0UZ.txtgy.cn
http://oUcSEvPy.txtgy.cn
http://zP7Mdfql.txtgy.cn
http://xrgjU3Uz.txtgy.cn
http://OQ0XszzI.txtgy.cn
http://xAOlwW26.txtgy.cn
http://B1KX0xc8.txtgy.cn
http://www.dtcms.com/a/383534.html

相关文章:

  • AI重构车载测试:从人工到智能的跨越
  • 前端梳理体系从常问问题去完善-基础篇(html,css,js,ts)
  • 文件查找 find
  • LeetCode 2110.股票平滑下跌阶段的数目
  • 解锁仓储智能调度、运输路径优化、数据实时追踪,全功能降本提效的智慧物流开源了
  • FPGA学习篇——Verilog学习MUX的实现
  • hadoop单机伪分布环境配置
  • Vue3 响应式失效 debug:Proxy 陷阱导致数据更新异常的深度排查
  • el-table的隔行变色不影响row-class-name的背景色
  • 【深度学习新浪潮】游戏中的agents技术研发进展一览
  • Condor 安装
  • 类和对象 (中)
  • [数据结构——lesson10.2堆的应用以及TopK问题]
  • 可可图片编辑 HarmonyOS(6)水印效果
  • 机器学习(四):支持向量机
  • 给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。
  • 《C++ 容器适配器:stack、queue 与 priority_queue 的设计》
  • Java 黑马程序员学习笔记(进阶篇8)
  • 无需标注的视觉模型 dinov3 自监督学习ssl
  • 多语言编码Agent解决方案(2)-后端服务实现
  • STM32F103C8T6通过SPI协议驱动74HC595数码管完全指南:从硬件原理到级联实现
  • 【系列文章】Linux中的并发与竞争[05]-互斥量
  • 海岛奇兵声纳活动的数学解答
  • 大模型入门实践指南
  • CSS 编码规范
  • Redis框架详解
  • Redis----缓存策略和注意事项
  • Redis的大key问题
  • 微服务学习笔记25版
  • 地址映射表