MySQL日志模块的简介

介绍

这篇文章将为大家详细讲解有关MySQL日志模块的简介,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>目录

一、简介

三。binlog

<强> MySql学习专栏

1。MySQL基础架构详解

2。MySQL索引底层数据结构与算法

3。MySQL5.7开启binlog日志,及数据恢复简单示例

4。MySQL日志模块

一、简介

MySQL 有两大重要的日志模块:redo log(重做日志) binlog(归档日志)

redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志,但两者记录的格式不同。

二、redo log

redo log: 又称(重做日志)文件,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来

在media failure时,redo log文件就能派上用场,如数据库掉电,InnoDB存储引擎会使用redo log恢复到掉电前的时刻,以此来保证数据的完整性。

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。

InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新一般是在系统比较空闲的时候完成的,以此来提升更新效率。

这里涉及到 WAL Write-Ahead Logging 技术,他的关键点就是 先写日志,再写磁盘

InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么总共就可以记录 4GB 的操作。

redo log会从头开始写,写到末尾就又回到开头循环写,如下图所示。

MySQL日志模块的简介

write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。

check point 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。

write poscheck point 之间的是未使用的部分,可以用来记录新的操作。

如果 write pos 追上 check point,表示redo log记录满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 check point 推进一下。

有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe

为什么要使用redo log日志?

假如我们对数据库进行DML操作,直接把执行SQL写入磁盘,当写入并发较大时,对数据写入磁盘的压力会造成一定影响,

当我们插入操作是,发现当前非叶子节点一页数据量不够时,要进行分页算法,效率会比较低;

当我使用redo log日志,先把我们DML操作写入日志,通过一个"中转站",空闲时候再通过check point 写入磁盘,效率会高很多;

MySQL日志模块的简介

MySQL设置Redo Log

  • 写入日innodb_log_buffer_size的大小:(默认8M)

  • innodb_log_file_size 重做日志文件的大小。

  • innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认2

  • innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认1

  • innodb_log_group_home_dir 指定日志文件组所在的路径,默认./,表示在数据库的数据目录下

    <李>

    <强> innodb_flush_log_at_trx_commit 设置提交时如何将日志缓冲区中日志刷日志文件中(值0,1,2)默认1

 MySQL日志模块的简介

<强>三。binlog

重做日志是InnoDB引擎特有的日志,而服务器层也有自己的日志,称为<强> binlog(归档日志)

为什么会有两份日志呢?

MySQL日志模块的简介