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

全面理解MySQL架构

一条SQL查询执行的流程

image

客户端

连接工具(Navacat,SQLyog,JDBC)都是客户端,主要用于发送执行SQL语句的请求

服务端

服务端可以分为server层和存储引擎层

server层

负责处理SQL语句, 解析, 优化, 缓存等.

负责权限管理, 用户认证等

提供了复制, 备份, 恢复等高级功能

Server层有自己的日志系统, 称为binlog. binlog记录了所有修改数据库数据的SQL语句(如INSERT,UPDATE, DELETE等). 单不包括SELECT和SHOW等查询语句.

  • binlog主要用于复制和恢复操作. (类似于Redis中AOF备份). 追加写
组件 核心职责
分析器 (Parser) 解析与检查:负责理解 SQL 语句在说什么,检查其语法和语义是否正确。
优化器 (Optimizer) 决策与规划:决定 SQL 语句怎么做最高效,生成最佳执行计划。
执行器 (Executor) 执行与反馈:根据执行计划实际操作数据,并返回结果。

存储引擎层

负责数据的存储和检索

MySQL支持多种存储引擎, 如InnDB, MyISAM, Memory等, 每一种引擎都有其特点和使用场景.

InnoDB是MySQL的默认存储引擎, 它支持事务, 行级锁, 和外键约束. innoDB有自己的日志系统, 称为redo log和undo log.

  • redo log记录事务提交后所有的修改信息, 在数据库崩溃后可以用来回复数据. 用于保证事务的持久性 (它记录的是对某个表空间的某个数据页的物理修改(例如"在表空间5的页号100的偏移量20处写入值'abc'"),而不是逻辑的SQL语句)
    • 循环写, 空间固定会用完.
  • undo log, 记录数据修改的反向操作, 用于支持事务的原子性和多版本并发控制

一条SQL更新语句的流程

image

事务两阶段提交: 先写入redo log, 再写入binlog
误删除一张表,如何找回数据?
  • 首先, 找到最近的一次全量备份(要做定期备份, 比如一天一备份)
  • 然后, 从备份的时间点开始, 将备份的binlog依次取出来, 重放删表之前的那个时刻
如果事务还未提交时发生崩溃, MySQL会如何处理?
  • 如果redo log里的事务状态时prepare, 并且binlog记录了对应完整的事务, 则提交事务 (通过事务id(XID) 查询事务信息)
  • 否则, 回滚事务
http://www.wxhsa.cn/company.asp?id=5506

相关文章:

  • Figma EX 125.7.5 UI原型设计
  • 基于WebSocket的命令与控制工具WSC2详解
  • LocalDateTime节日和平日在时间占比计算方法
  • JSON字符串转换List对象列表 JSONArray toJavaList
  • vue3 使用 docx-preview 预览 Word文档
  • 数据库原理-第三章——SQL
  • 啥是CPU
  • C# Avalonia 15- Animation- CodeAnimation
  • ubuntu 18.04安装mysql 8.0.41
  • Topaz Photo AI Pro 4.0.4 AI图片智能降噪(win版)
  • 阿里云基础设施 AI Tech Day AI 原生,智构未来——AI 原生架构与企业实践专场
  • 实用指南:LINUX910 CENTOS8 新建虚拟机;重设root密码/时间同步
  • 零基础学习PYthon记录
  • C++ std::unordered_set
  • 如何将一个项目同时提交到GitHub和Gitee(码云)上
  • 基于Matlab的LeNet-5车牌字符识别系统实现
  • MATLAB的交通标志牌识别实现
  • Python常见的数据结构和代码示例
  • Grafana 中文入门教程 | 构建你的第一个仪表盘
  • Gitee DevOps:中国开发者效率革命的数字引擎
  • Topaz Photo AI Pro 4.0.4 AI图片智能降噪
  • C++ std::map
  • 易基因:Nat Genet/IF29:董朝斌团队ChIP-seq等揭示作物株型穗型发育调控新机制 助力表观遗传育种驯化改良(顶刊佳作)
  • Edge浏览器网页长截图
  • Python TensorFlow的CNN-LSTM-GRU集成模型在边缘物联网数据IoT电动汽车充电站入侵检测应用
  • C++多线程编程—线程控制、同步与互斥详解
  • MySQL启动失败:mysqld.log Permis 报错处理.250916
  • 源码管理—密钥硬编码问题
  • 无速度传感器交流电机的扩展Luenberger观测器
  • AI Ping体验记:终于有人做大模型服务的“性能监控”了