当前位置:首页 > 分享 > 正文

MySQL_数据文件浅谈(mysql数据文件类型)

前言

MySQL是项目中常用的数据库。其中关于索引,存储,高可用等的设计思路都非常经典。笔者接下来会逐一和大家分享。

数据日志

  • bin-log:记录了数据库上的所有改变,以二进制形式归档日志,存放数据的文件(statement,row,mixed三种格式)
  • redo-log:wal文件,顺序循环写记录存放事务提交记录,如果日志bin-log提交失败,则可以用来重做。
  • undo-log:记录事务开始前的状态,用于事务失败时的回滚操作

说明

  • redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。用于记录事务开始前的状态,用于事务失败时的回滚操作

写文件流程

bin-log写入流程

流程: client发起事务提交请求

---> buffer区

--->write操作

--> OS page cache

---> fsync操作

--> disk


redo-log写入流程

  • 存在 redo log buffer 中,物理上是在 MySQL 进程内存中,就是图中的红色部分;
  • 写到磁盘 (write),但是没有持久化(fsync),物理上是在文件系统的 page cache 里面,也就是图中的黄色部分;
  • 持久化到磁盘,对应的是 hard disk,也就是图中的绿色部分

结语

MySQL在数据文件存储上,除了索引文件,也引入了wal的设计思路。笔者使用到的存储中间件均用到了wal的设计,包括MySQL,ES,MongoDB,Kafka等。顺序写文件是性能最高的一种方式,防止数据丢失,也是典型的AP模型的设计思路。