架构

MySQL5.5版本之后,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛,分为内存结构和 磁盘结构,这节课学磁盘结构

 

磁盘结构 共有七块区域,分别是系统表空间(system tablespace)、每张表独立的文件表空间(file-per-table tablespace)、通用表空间(general tablespaces)、 撤销表空间(undo tablespaces)、临时表空间(temporary tablespaces)、双写缓冲区(doublewrite buffer files)、重做日志(redo log)

 

1、系统表空间: 作用是更改缓冲区的存储区域。如果表是在系统表空间而不是每个表文件或通用表空间中创建的,它也可能包含表和索引数 据。MySQL5.x版本中的系统表空间还包含InnoDB数据字典、undolog。MySQL8.0之后的系统表空间主要包含的就是'更改缓冲区'的数据 参数: innodb_data_file_path

 

2、文件表空间: 每张表的文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统上的单个数据文件中。对于InnoDB存储引擎来说, 默认的每张表的独立表空间文件是开启的,也就意味着我们建立的每一张表都会生成一个对应的表空间文件,因此表数据并不会在'系统表空间'存放 参数: innodb_file_per_table

 

3、通用表空间: 需要手动通过 create tablespace语法创建通用表空间。在创建表时,指定这个表使用我们创建好的表空间。

 

创建表空间语法

 

create tablespace 表空间名 add datafile '自定义文件名.ibd' engine = 引擎;

 

创建表,并让这个表指向我们创建好的表空间

 

create table 表名 tablespace 表空间名;

 

在linux查看我们创建的表空间: cd /var/lib/mysql && ll

 

1、撤销表空间: MySQL实例在初始化时会自动创建两个默认的undo表空间文件(初始大小16M),用于存储undo log日志。 这两个默认的表空间文件分别是undo_002、undo_004,这两个文件大小都是16M

 

2、临时表空间: InnoDB引擎使用'会话临时表空间'和'全局临时表空间'。存储用户创建的临时表等数据

 

3、双写缓冲区: InnoDB引擎会将数据页从缓冲池(buffer pool)刷新到磁盘前,在刷新之前会先将数据页写入'双写缓冲区'文件 中,便于系统异常时恢复数据。双写缓冲区的两个文件为#ib_16384_0.dblwr、#iib_16384_1.dblwr

 

4、重做日志: 是用来实现事务的持久性。该日志文件由两部分组成,重做日志缓冲(redo log buffer) + 重做日志文件(redo log), 前者是在内存中。后者是在磁盘中。当事务提交之后会把所有修改信息都会存到该日志中,用于在刷新脏页到磁盘时,发生错 误时,进行数据恢复使用。重做日志的两个文件为ib_logfile()、ib_logfile1