美文网首页程序员
《MySQL技术内幕:InnoDB存储引擎》第三章 文件(读书笔

《MySQL技术内幕:InnoDB存储引擎》第三章 文件(读书笔

作者: 半亩房顶 | 来源:发表于2019-02-21 17:54 被阅读12次

3.1 参数文件

  • mysql启动时,会先读取一个配置参数文件,用来寻找数据库的各种文件所在位置以及制定某些初始化参数
  • 启动时,就算没有找到参数文件,也会以默认值或程序指定参数的默认值。
  • mysql架构中记录了访问该实例的权限,找不到这个架构时,则无法成功启动

3.1.1 什么是参数

简单说,就是一个个键值对,eg. innodb_buffer_pool_size = 1G

3.1.2 参数类型

参数主要分为两类,动态参数和静态参数,动态参数意味着可以在mysql实例中进行更改,静态参数则说明在整个实例生命周期中不得更改。

global 和 session关键字表明该参数的修改是基于当前会话还是整个实例的生命周期。

##变量名前有空格
set [global | session] system_var_name = expr
##变量名前无空格
set [@@global. | @@session. | @@]system_var_name = expr

有些只能在会话中修改,如autocommit;
有些参数改完后在整个实例生命周期都会生效,如binlog_cache_size;
有些参数既可在当前,又可以在整个实例中,如read_buffer_size
全局修改也并不会修改参数文件

3.2 日志文件

3.2.1 错误日志

遇到问题应该首先查看该文件,不但记录了出错信息,也记录了一些警告信息或者正确的信息。

3.2.2 慢查询日志

运行时间超过 long_query_time的SQL语句将被记录到慢查询日志文件中,默认值为10(s)
默认情况下,慢查询日志不启动,需要将 log_slow_queries设置为on

  • 运行时间 > 阈值会被记录,而非 >=
  • Mysql 5.1版本后,long_query_time 以微秒记录时间

log_queries_not_using_indexes设置为on时,如果sql语句没有使用索引,则该语句同样会被记录

mysqldumpslow 命令可以帮助我们分析慢查询日志文件

mysql 5.1后可以将慢查询放入 slow_log表中,log_output参数修改为 table即可,此表是CSV引擎,可以切换为MyISAM用来提高效率,如果已经启动了慢查询需要先将slow_query_log 设置为off

3.2.3 查询日志

5.1版本开始,可以放入general_log表

3.2.4 二进制日志

记录对数据库执行更改的所有操作,但是不包括select和show这类操作。他记录了更改操作的时间和执行时间等信息,作用如下:

  • 恢复
  • 复制

配置参数 log_bin[=name]来启动二进制文件,如不指定name,默认为主机名。启动后会影响性能,但损失十分有限。

  • binglog_cache_disk_use 临时文件使用次数,使用多则证明缓冲设置小了,需要增大binlog_cache_size
  • binglog_cache_use 缓冲使用次数

5.1开始,有一个重要的参数binlog_format,影响了二进制日志的格式
(1)STATEMENT格式和之前版本一样,记录的是SQL语句
(2)ROW模式下,不单单记录SQL语句,还会记录表的行更改情况。
(3)MIXED格式下,默认STATEMENT格式,一下五种情况,则为ROW格式

  1. 表存储引擎为NDB,这是对于表的DML操作都会以ROW格式记录
    2)使用了UUID(), USER(), CURRENT_USER(), FOUND_ROWS()等不确定函数
    3)使用了INSERT DELAY语句
    4)使用了用户定义函数(UDF)
    5)使用了临时表


    二进制日志格式支持情况

二进制日志可以使用mysqlbinlog工具查看

3.3 套接字文件

Unix系统本地连接MySQL可以用Unix域套接字方式,这种方式需要一个套接字文件

3.4 pid文件

MySQL实例启东市会将自己的进程ID写入一个文件中,即pid文件

3.5 表结构定义文件

.frm文件,存储表结构定义,或者视图定义

3.6 InnoDB存储引擎文件

这节中是存储引擎自身的文件

3.6.1 表空间文件

可用innodb_data_file_path设置文件位置,也可用多个文件组成表空间,不同磁盘上的两个文件还可以提升性能。设置innodb_data_file_path后,基于InnoDB殷勤的表的数据都会记录下来。
设置innodb_file_per_table则会将表分文件存放


InnoDB表存储引擎文件

3.6.2 重做日志文件

默认会有 ib_logfile0 和 ib_logfile1两个文件,它们记录了对于InnoDB存储引擎的事务日志。
主要目的是保证数据的完整性
每个引擎至少一个重做日志文件组,一个组至少两个文件

日志文件组
  • 重做日志文件设置过大,在恢复时可能需要很长的时间
  • 太小了可能导致一个事务的日志需要多次切换重做日志文件
重做日志与二进制日志区别:
  • 二进制日志记录的是所有与mysql有关的,可能多个引擎;重做日志只记录InnoDB的
  • 二进制文件不管格式如何,都是记录的关于一个事务的具体操作内容;重做日志记录的是关于每个页的更改的物理情况
  • 写入时间也不同,二进制文件是在事务提交前进行记录的,而在事务精选的过程中,不断有重做日志条目被写入重做日志文件中。


    重做日志结构 & 写入过程
重做日志缓冲写入磁盘时间

1、主线程每秒会将重做日志缓冲写入文件
2、innodb_flush_log_at_trx_commit参数控制事务提交时处理重做日志的方式

  • 为0时,提交事务时不做操,等待主线程每秒的刷新
  • 为1时,在提交时将缓存同步写到磁盘,
  • 为2时,异步写入磁盘,不能完全保证提交时肯定会写入,只是有这个动作。

欢迎关注个人微信公众号


半亩房顶.jpg

相关文章

网友评论

    本文标题:《MySQL技术内幕:InnoDB存储引擎》第三章 文件(读书笔

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