1. 表空间文件
- InnoDB 采用将存储的数据按表空间进行存放的设计
- 在默认配置下,会有一个初始大小为10MB,名为ibdata1的文件
- 该文件就是默认的表空间文件
- 用户可以通过多个文件组成一个表空间
- 所有基于InnoDB 存储引擎的表的数据都会记录到该共享表空间(innodb_data_file_path指向的表空间);innodb_file_per_table 参数用于指定独立表空间。
- 独立表空间存储的是该表的数据、索引和插入缓存BITMAP 等信息
- 其余信息存放在共享表空间,例如 Insert Buffer 等
2. 重做日志文件(redo log file)
- 虽然属于日志文件,但是是InnoDB 存储引擎中特有的
- 每个InnoDB 存储引擎至少有1个redo 日志文件组,每个组下至少有2个redo log 文件,如默认的ib_logfile0 和ib_logfile1
- 为了得到更高的可靠性,用户可以设置多个镜像日志组,将不同的文件组放在不同的磁盘上,以此提高redo log的高可用性
- 日志组中的每个redo log 文件大小一致,并以循环写入的方式运行。
- 先写ib_logfile0
- ib_logfile0 写满后切换为ib_logfile1
- ib_logfile1 写满后切换为ib_logfile0
- redo log 文件的大小应该设置合适。设置太大,在恢复时可能需要很长的时间;设置太小,可能导致一个事务的日志需要多次切换redo log 文件,另外redo log 文件太小还会导致频繁发生async checkpoint,导致性能的抖动
- 记录的是关于每个页的更改的物理情况
- redo log 基本格式
▲ redo_log_type 占用1字节,表示redo 日志的类型
▲ space 表示表空间ID,但采用压缩的方式,因此占用的空间可能小于4字节
▲ page_no:表示页的偏移量,同样采用压缩的方式
▲ redo_log_body:表示每个redo 日志的数据部分,恢复时需要调用相应的函数进行解析
- redo 日志写入过程