Mysql存储引擎文件

本文介绍以下引擎文件

  • 表空间文件
  • 重做日志文件

1.表空间文件

  • InnoDB将存储的数据按表空间进行存放。默认配置下会有一个初始大小为10MB,名为ibdata1的文件。该文件就是默认的表空间文件。用户也可以通过多个文件组成一个表空间。文件的大小可以自动增长。
  • 如果用户设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享空间中。如果设置了参数innodb_file_per_table,则用户可以将每个基于InnoDB存储引擎的表产生一个独立表空间。独立表空间命名规则:表明.idb。这些单独表空间仅仅存储该表的数据、索引和插入缓冲BITMAP等信息。其余还是存放在共享表空间。

2.重做日志文件(redo log)

redo log记录了对于InnoDB存储引擎的事务日志。作用:数据库由于所在主机断电导致实例失败,会使用redolog来恢复到断电前时刻。2.1重做日志文件组

  • InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认ib_logfile0和ib_logfile1。
  • 为了高可用性,用户可以设置多个的镜像日志组,将不同的文件组放在不同的磁盘上。
  • 在日志组中每个重做日志文件大小一致,并以循环写入的方式运行。
  • InnoDB先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,在当重做日志文件2也被写满时,会再切换回重做日志文件1.

2.2重做日志文件大小设置问题

  • 如果重做日志这是的很大,恢复需要很长时间。
  • 如果设置太小,导致一个事务的日志需要多次切换重做日志文件。也会导致频繁的async checkpoint

2.3redolog和binlog区别 TODO:去dba哪里查看下具体的binlog和redolog记录的信息区别是什么

  • binglog记录InnoDB,MyISAM、Heap等其他存储引擎的日志,redolog记录InnoDB数据库本身的事务日志。
  • 记录内容不同,binglog记录事务的具体操作内容,即该日志的逻辑日志。而redolog记录是关于每个页的更改的物理情况。
  • 写入时间不同,binlog仅在事务提交前进行提交,即只写磁盘一次。而redolog在事务执行过程中,却不断有重做日志条目被写入redolog文件中

2.4redolog的写入写入redolog不是直接写,而是先写入一个redolog buffer中,然后按照一定的条件顺序的写入日志文件。redolog buffer往磁盘写入时,按照512个字节,也就是一个山区的大小进行写入。因为扇区是最小单位,因此可以保证写入必定是成功的,因此重做日志的写入过程中不需要有double write(两次写)2.5参数innodb_flush_log_at_trx_commit

  • 0:代表当提交事务时,并不将重做日志写入磁盘,而是等到Master Thread每秒的刷新。
  • 1:代表执行commit时将日志同步写入磁盘
  • 2:代表异步写入磁盘,即文件写入redo log buffer中,因此不能保证在commit时肯定会写入磁盘

设置为2的时候,如果数据库发生宕机而操作系统及服务器并没有宕机,可以通过redo log buffer进行恢复,因为redolog buffer在文件系统缓存中。

参考文献:InnoDB存储引擎第二版

上一篇:团体程序设计天梯赛-练习集 L1-044 稳赢 (15分)


下一篇:MySQL架构理解