文件

作者: 简书徐小耳 | 来源:发表于2018-11-27 22:24 被阅读1次

    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到磁盘,进而出现页断裂的情况。

    相关文章

      网友评论

          本文标题:文件

          本文链接:https://www.haomeiwen.com/subject/bjnnqqtx.html