MySQL总结


通过以上几篇文章分别介绍了 MySQL 的文件系统、索引、锁、事务等功能点,这篇文章将对这些知识点进行汇总,描述出 MySQL 大概的架构。

1. 文件数据

MySQL 在文件数据上可以划分为 MySQL 系统数据存储引擎数据

  • 文件数据
    • 系统文件
      • 参数文件
        • 参数文件指的是系统运行时的参数,主要分为 ‘静态参数’ 和 ‘动态参数’。
      • 日志文件
        • 系统错误日志文件
        • 二进制日志 (binlog)
          • binlog 目前有三种记录格式,分别是 STATEMENT、ROW 和 MIXED。其中,ROW 和 STATEMENT 格式不兼容,因为 binlog 是在事务提交时写入。
        • 慢查询日志
        • 查询日志
      • 套接字文件
        • 套接字文件是 UNIX 下使用套接字链接方式打开的 socket 文件。
      • pid 文件
      • 表结构文件
        • 定义表结构的文件,每个表都有一个 frm 的表结构文件。
    • InnoDB 存储引擎文件
      • 表空间文件
        • 实际存储数据的文件,名称为 ibdata1 的文件作为共享表空间文件,MySQL 也支持为每个表单独设置表空间文件,后缀名为 .ibd。
      • redo log
        • redoLog 又称为重做日志,文件名称为 ib_logfile0/ib_logfile1。

2. 索引系统

MySQL 的索引系统主要是由于 B+ 树索引作为底层数据结构,也有采用 Hash 自适应索引场景。

  • 索引
    • 分类
      • B+Tree 索引
        • B+ 树索引作为 MySQL 底层数据结构的好处在于 B+ 树平衡且层级不高,并且叶子节点可以作为聚集索引。
      • 全文索引
        • MySQL 的全文索引也是采用倒排算法,通过关键字来进行文档映射,现实工作中未涉及到,因此未详细研究。
      • Hash 索引
        • InnoDB 只支持自适应的 Hash 索引,不能显式地创建,并且要满足 Hash 索引自动创建的条件(等值查询、命中范围、查询频率)。

3. 锁

    • 锁分类
      • 行级锁
        • 共享锁 (S 锁)
          • 共享锁允许事务同时读取同一行数据。
        • 排他锁 (X 锁)
          • 排他锁是独占锁,不允许其他事务读取或操作数据。
      • 表锁
        • 意向共享锁 (IS 锁)
          • 意向共享锁是表维度的锁,在事务尝试读取表中某行数据时自动加上,同理意向排他锁也是这个逻辑。设计意向锁的主要目的是在于,当事务想要获取到表锁时,可以直接通过是否能获取到意向锁来判断,相当于一个表级别的锁标志。
        • 意向排他锁 (IX 锁)
      • 锁算法
        • 行锁
          • 行锁的作用范围是对数据的某一行进行操作。
        • 间隙锁
          • 间隙锁是对数据间隙进行上锁,这样可以防止数据出现幻读的情况。
        • Next-Key Lock
          • 行锁 + 间隙锁就是 Next-Key Lock。
        • 锁降级
          • 当确定可以使用行锁时,Next-Key Lock 会降级成行锁。

4. 事务

  • 事务
    • 事务的隔离级别
      • 串行化 (Serializable)
      • 读未提交 (Read Uncommitted)
      • 读已提交 (Read Committed)
      • 可重复读 (Repeatable Read)
    • 串行化
      • 串行化指的是事务按照串行化执行的结果执行,InnoDB 的串行化是通过增加读锁的方式来实现的。
    • 读未提交
      • 读未提交指的是当前事务可以读取到其他事务尚未提交的数据,底层实现是当前事务直接返回记录上的最新值。
    • 读已提交
      • 读已提交指的是事务中的 SQL 在执行时会去读取最后一次提交的数据信息。
    • 可重复读
      • 可重复读指的是事务开始时会分配一个全局唯一且自增的事务 ID,并且可重复读只能读取到小于等于该事务 ID 的数据。快照数据是通过 UNDO LOG 实现的。

总结

本文对 MySQL 的关键组成部分进行了总结,包括文件数据管理、索引系统的实现、锁机制以及事务处理。通过对这些知识点的梳理,可以帮助读者更好地理解 MySQL 的整体架构和工作原理。


  TOC