InnoDB-----第3章 文件

第3章 文件


1. 参数文件

​ 当MySQL实例启动时,数据库会先去读取一个配置参数文件(默认为my.cnf),用来寻找数据库中的各种文件所在位置以及指定某些初始化参数,这些参数定义了某种内存结构有多大等.

​ 虽然MySQL实例启动是如果找不到my.cnf,也会使用默认的配置信息进行启动,但是如果找不到mysql架构(就是库文件中的一个数据库,其中记录了MySQL实例的各种参数信息)一样会启动失败.

(1). 什么是参数

​ 可以看做是键值对,数据库的很多属性都是根据参数进行优化的.

(2). 参数类型

MySQL中的参数可以分为两类:

  1. 动态参数:可以在MySQL实例中进行更改
  2. 静态参数:在整个实例的生命周期内都不能进行修改

2. 日志文件

(1). 错误日志

​ 错误日志对MySQL的启动,运行,关闭过程进行了记录.在默认情况下错误文件的文件名为服务器主机名(如benjamin.err).

(2). 慢查询日志

​ 慢查询日志能根据SQL语句运行的时间筛选出可能有问题的SQL语句,帮助开发者进行定位,从而进行SQL语句层面的优化.

​ 默认情况下,这个功能是不启动的,long_query_time这个参数为0,如果设置一个大于0的值,MySQL数据库运行时会记录下所有运行超出这个时间的SQL语句(不会记录刚好等于这个值的语句).从MySQL 5.1开始单位为微秒,之前是秒.

​ 另外一种情况是,如果一个SQL语句没有使用索引,那么同样会被记录到慢查询日志中.

​ 从MySQL 5.6.5版本新增了参数log_throttle_queries_not_using_indexes,用来表示每分钟插入到慢查询日志的条数的最大值,默认为0.

​ 从MySQL 5.1开始可以讲慢查询日志记录到一张表中,在mysql架构下,名为slow_log.参数log_output指定了慢查询日志的输出格式,默认为FILE,可以设置为TABLE,就可以查询到mysql架构下的slow_log表了.且该参数是全局动态的,可以在线修改.

​ InnoSQL版本加强了对于SQL语句的不活方式,在原来的基础上在slow_log中新增了对于逻辑读取和物理读取的统计.

(3). 查询日志

​ 查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行,都会被记录下来.默认文件名为主机名.log.

(4). 二进制日志

​ 二进制日志记录了对MySQL数据库执行更改的所有操作,但是不包括select和show这类的操作,因为这类操作没有对数据进行修改.其他的操作数据的操作即时没有对数据进行有效的修改,也会被二进制日志记录下来.

​ 二进制日志还包括了执行数据库更改操作的时间等其他额外信息,总的来说,有一下几种作用:

  • 恢复:用于发生宕机后的数据恢复.
  • 复制:通过记录对数据的修改可以得到完整的数据,从而复制数据库.
  • 审计:通过二进制日志中的信息审计是否有注入攻击.

​ 如果不指定名称,默认为主机名.序列号(如:benjamin.000001).

​ 二进制日志文件默认情况下不开启,需要手动指定参数来启动.

​ 参数max_binlog_size指定了单个二进制文件的最大大小.默认值为1 073 741 824(1G).

​ 所有未提交的事务的二进制日志会被记录到一个缓冲中去,等待该事务提交是之将从缓冲中写入二进制日志文件.当缓冲中的日志内容大于这顶的binlog_cache_size时,会生成临时文件存储缓冲中的二进制日志.

​ 默认情况下,二进制日志并不是在每次写的时候同步到磁盘,因此,当发生宕机时,可能会有一部分没有写入,会给恢复和复制带来问题.参数sync_binlog=[N]表示没写缓冲多少次就同步到磁盘.

​ 参数binlog_format参数十分重要,影响了记录二进制日志的格式.可以设定的值:

  • STATEMENT:记录日志的逻辑SQL语句.
  • ROW:记录表的更改情况.
  • MIXED:默认使用STATEMENT的形式进行记录,有一些情况下会使用ROW形式进行记录:
    • 表的存储引擎为NDB
    • 使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_COUNT()等不确定函数
    • 使用了INSERT DELAY语句
    • 使用了用户定义函数
    • 使用了临时表

​ 要查看二进制日志文件,必须通过MySQL提供的工具mysqlbinlog.

3. 套接字文件

​ UNIX系统下本地连接MySQL如果采用UNIX域套接字的方式,需要一个套接字文件,这个文件可由参数socket控制,一般在/tmp目录下.

4. pid文件

​ 记录自己的进程id,主机名.pid.

5. 表结构定义文件

​ 因为MySQL插件式存储引擎的体系结构的关系,MySQL数据库的存储是根据表记性的,每个表都会有与之对应的文件.但不论表采用何种存储引擎,MySQL都会有一个以frm为后缀的文件,记录了该表的表结构定义.

​ frm还用来存放视图的定义,该文件是文本文件,可以直接使用cat查看.

6. InnoDB存储引擎文件

(1). 表空间文件

​ InnoDB采用将存储的数据按表空间进行存放的设计,默认配置下会有一个初始大小为10MB,名为ibdata1的文件.该文件就是默认的表空间文件.

​ 可通过innodb_data_file_path参数对文件路径进行设置,当然也可以设置多个路径来平均磁盘的负载:

innodb_data_file_path=/dir/filename1:/dir/filename2

​ 设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中.如果设置了innodb_file_per_table参数,则用户可以为每一个基于InnoDB存储引擎的表产生一个独立表空间.命名规则为表名.ibd.

(2). 重做日志文件

​ InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件.在MySQL官方手册中称其为InnoDB存储引擎的日志文件,准确定义应该是重做日志文件.记录了对于InnoDB存储引擎的事务日志.

​ 当实例或者截止失败时,InnoDB存储引擎是使用重做日志恢复到发生故障前的数据库状态,以此来保证数据的完整性.

​ 每个InnoDB存储引擎至少有1个重做日志文件组,每个文件组下面至少有2个重做日志文件.

​ 在日志组中的每个重做日志文件的大小一致,并以循环的方式运行.

重做日志文件的二进制日志文件的区别:

  • 二进制日志文件会记录所有与MySQL数据库有关的日志,包括所有引擎.而重做日志文件只记录InnoDB存储引擎本身的事务.
  • 二进制日志文件记录的是一个事务的操作情况,而重做日志文件记录的是每个页在物理层面上的修改.
  • 二进制日志文件仅在事务提交前进行提交,只写入磁盘一次,而重做日志文件在事务进行的过程中会不断的插入条目到重做日志文件中.

​ 在InnoDB存储引擎中,对于不同的操作有不同的重做日志格式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值