mysql参数文件
- 定义:告诉mysql实例启动时候在哪里可以找到数据库文件,并指定某些初始化参数
- 参数存储在my.cnf中,可能有多个(会按照顺序来加载)
mysql日志文件
- 定义:用来记录mysql实例对某种条件作出相应时写入的文件,如错误日志,二进制日志文件,慢查询日志文件,查询日志文件
- binary log日志记录了对mysql执行更改的所有操作,不包括select 和show操作,其可以用来进行恢复,复制,审计。
mysql套字接文件
- 定义:当用UNIX域套接字方式进行连接时候需要的文件
mysqlpid文件
-定义:mysql实例的进程ID文件
mysql表结构定义文件
- 定义:用来存放mysql表结构定义文件
- frm为后缀的文件,记录了该表的表结构定义。
- frm 也可以存放试图定义
innodDB存储引擎文件
- 定义:每个存储引擎都会有自己的文件来保存各种数据,他们真正存储了记录和索引等数据。
表空间
- innodb将存储的数据按表空间进行存放的设置
- 初始化会设置一个10M的ibddata1文件,可以通过innodb_data_file_path对其进行设置
-
多个文件也可以组成一个表空间
image.png - 所有基于innodb存储引擎的表数据都会记录到该共享表空间
- innodb_file_per_table=on 代表每张表都会新建自己的独立的表空间,命名规则就是表名.ibd
- 单独的表空间只存储该表的数据,索引和插入缓冲等新兴 ,其余信息还是存放在默认的表空间
- 共享表空间分配后不能回缩:当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了,进行数据库的冷备很慢;
重做日志文件
- 每个innodb引擎至少有一个重做日志文件组
- 每组文件至少有2个redo log
- 为了跟高的可靠性,可以将日志组备份到不同的磁盘,即镜像日志组。
- 一个日志组的文件大小一致,并循环写入
- 引擎会先写重做日志1,当达到文件末尾,切换到重做日志2,写满后在切换到1
-
重做日志的结构
image.png - 重做日志通过redo log buffer 写入, 从重做日志写入磁盘的是按照512个字节,也就是一个扇区的大小进行写入,因为扇区是最小写入单位,因此可以保证写入一定是成功的,所以不需要doubblewrite
double write处理页断裂
doublewrite是Innodb表空间内部分配的一片缓冲区,一般double write包含128个页,对于pagesize为16k的页,总共2MB,doublewrite页与数据页一样有物理存储空间,存在于共享表空间中。Innodb在写出缓冲区中的数据页时采用的是一次写多个页的方式,这样多个页就可以先顺序写入到doublewrite缓冲区,并调用fsync()保证这些数据被写出到磁盘,然后数据页才被写出到它们实际的存储位置并再次调用fsync()。故障恢复时Innodb检查doublewrite缓冲区与数据页原存储位置的内容,若doublewrite页处于页断裂状态,则简单的丢弃;若数据页不一致,则会从doublewrite页还原。由于doublewrite页落盘与数据页落盘在不同的时间点,不会出现doublewrite页和数据页同时发生断裂的情况,因此doublewrite技术可以解决页断裂问题,进而保证了重做日志能顺利进行,数据库能恢复到一致的状态。
DB page=4OS page=IO page=8sector size。
由于任何DB page的写入,最终都会转为sector的写入,如果在写磁盘的过程中,出现异常重启,就可能会发生一个DB页只写了部分sector到磁盘,进而出现页断裂的情况。
网友评论