+++++++++++++++++++++++++++++++++++++++++++

标题:MySQL数据库日志文件

时间:2019年2月25日

内容:MySQL数据库日志文件(redo日志和undo日志文件)

重点:MySQL数据库日志文件(redo日志和undo日志文件)

+++++++++++++++++++++++++++++++++++++++++++

1. redo日志文件

1.1 redo日志写入过程

数据库产生redo日志信息后;将redo日志信息缓存到redo日志缓冲区中;持久化到redo日志文件中(每个redo日志组中可以包含多个日志文件,多个文件之间采取循环覆盖写入的方式)。


1.2 redo日志缓冲区

1.2.1 相关参数

mysql> show variables like 'innodb_log_buffer%';

mysql undolog用什么工具可看 mysql undo文件_数据


1.2.2 触发条件

当事务提交时会对redo log buffer中的数据进行持久化。

master thread每秒会对redo log buffer中的数据进行持久化。

当缓存剩余空间小于全部空间的一半时redo log buffer中的数据进行持久化。


1.3 redo日志相关知识

镜像组:MySQL5.1以上版本已经不支持redo镜像组,也就是说只能存在一组重做日志。

日志作用:在数据库重启时可以利用redo日志进行实例恢复。

日志存储:redo日志是以块的形式存储的,每个块大小为512字节,由日志头(12)、日志内容(492)和日志尾(8)。

日志文件数:MySQLredo日志文件数量默认为2个,可以通过参数innodb_log_files_in_group进行调整。

日志文件名称:ib_logfile0、ib_logfile1,文件存放在innodb_log_group_home_dir。

日志存储内容:记录数据库中的数据也发生的变化。

日志写入方式:日志组中的多个日志文件之间采取循环覆盖式写入。


1.4 redo日志文件参数

innodb_log_buffer_size //设置缓存空间的大小
innodb_log_file_size //设置redo日志文件的大小
innodb_log_files_in_group //存在连个日志组
innodb_log_group_home_dir //日志文件存放位置

2. undo日志文件

2.1 undo日志的作用

保存事务发生前的数据版本,实现数据回滚。

实现多版本并发控制,即非锁定读。


2.2 undo产生与释放

事务发生前将当前的数据版本形成undo日志,同时会产生相关redo日志,保证undo日志的可靠性。

事务提交后由purge线程判断其他事务是否在使用undo在上一个事务之前的版本信息,从而确定是否可以清理undo日志空间。


2.3 undo日志文件

MySQL5.6版本及以前的数据库中undo段位于共享表空间(ibdata)中。

MySQL5.7版本及以后的数据库中可以为undo配置独立表空间。

undo独立表空间相关参数如下:

mysql> show variables like '%undo%';

mysql undolog用什么工具可看 mysql undo文件_日志文件_02