重做日志(redo log)

前言:之前一直弄不清楚 mysql 里面 bin log 和 innodb log 文件的区别,在脑子里面一直有个疑问 binlog 日志文件已经可以用来进行
数据库的日志备份恢复了,怎么又多了一个 redo log 文件了。相信也有很多人有这个疑惑,现在把整个过程文档整理出来,希望对大家有所帮忙。

如果对 Oracle 很了解,那么在整个学习 innoDB log 的时候,可以把联
机重做日志的那套理论套在学习 innoDB log 上面,几乎是一样的;

1、innodb log 的基础知识
innodb log 顾名思义:即 innodb 存储引擎产生的日志,也可以称为
重做日志文件,默认在 innodb_data_home_dir 下面有两个文件
ib_logfile0 和 ib_logfile1。MySQL 官方手册中将这两个文件叫文
InnoDB 存储引擎的日志文件;

查看日志文件位置:
[root@rh55 ~]# cat /etc/my.cnf
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[root@rh55 ~]# cd /usr/local/mysql/data/
[root@rh55 data]# ls -l
total 28732
-rw-rw---- 1 mysql mysql 18874368 Jun 10 16:52 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Jun 10 16:52 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Jun 10 16:52 ib_logfile1
drwxr-xr-x 5 mysql mysql 4096 Jun 19 14:12 mysql
drwx------ 2 mysql mysql 4096 Jun 10 16:52
performance_schema
drwxr-xr-x 2 mysql mysql 4096 Jun 10 16:18 test

innodb log 的作用:当 MySQL 的实例和介质失败的时候,Innodb存储引擎就会使用 innodb log 文件进行恢复,保证数据库的完整性;

innodb log 的写原理:(请容许我再放下 InnoDB 的原理图,并且建议把这张图看到吐)

每个 InnDB 存储引擎至少有 1 个重做日志文件组(group),每个文件组下至少有两个重做日志文件,默认的为 ib_logfile0、ib_logfile1;
日志组中每个重做日志的大小一致,并循环使用;

InnoDB 存储引擎先写重做日志文件,当文件满了的时候,会自动切换到日志文件 2,当重做日志文件 2 也写满时,会再切换到重做日
志文件 1;为了保证安全和性能,请设置每个重做日志文件设置镜像,并分配到不同的磁盘上面;

(发现以上特性跟 ORACLE 的连接重做日志文件简直是一样的)

2、innodb log 的相关参数

运行脚本:show variables like 'innodb%log%'; 查看重做日志的相关参数
mysql> show variables like 'innodb%log%';

常用设置的参数有:
innodb_mirrored_log_groups 镜像组的数量,默认为 1,没有镜像;
innodb_log_group_home_dir 日志组所在的路径,默认为 data 的home 目录;
innodb_log_files_in_group 日志组的数量,默认为 2;
innodb_log_file_size 日志组的大小,默认为 5M;
innodb_log_buffer_size 日志缓冲池的大小,图上为 30M

3、参数的相关调优
3.1 重做日志文件的大小设置跟 ORACLE 一样,面临的问题是相似的。

当 innodb log 设置过大的时候,可能会导致系统崩溃后恢复需要很长的时间;
当 innodb log 设置过小的时候,当一个事务产生大量的日志的时候,需要多次切换重做日志文件,会产生类似如下的报警;
130702 12:53:13 InnoDB: ERROR: the age of the last checkpoint
is 2863217109,
InnoDB: which exceeds the log group capacity 566222311.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the

4、重做日志与二进制日志的区别
4.1 记录的范围不同:二进制日志会记录 MySQL 的所有存储引擎的日志记录(包括 InnoDB、MyISAM 等),而 InnoDB 存储引擎的重做日志只会记录其本身的事务日志。
4.2 记录的内容不同:二进制日志文件记录的格式可以为STATEMENT 或者 ROW 也可以是 MIXED,其记录的都是关于一个事务的具体操作内容。
InnoDB 存储引擎的重做日志文件记录的关于每个页的更改的物理情况。
4.3 写入的时间也不同:二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入到重做日志文件中。

mysql之 redo log的更多相关文章

  1. MySQL的redo log结构和SQL Server的log结构对比

    MySQL的redo log结构和SQL Server的log结构对比 innodb 存储引擎 mysql技术内幕 log buffer根据一定规则将内存中的log block刷写到磁盘,这个规则是 ...

  2. MySQL中Redo Log相关的重要参数总结

      参数介绍 下面介绍.总结一下MySQL的Redo Log相关的几个重要参数:innodb_log_buffer_size.innodb_log_file_size.innodb_log_files ...

  3. MySQL中redo log、undo log、binlog关系以及区别

    MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...

  4. 【MySQL】redo log --- 刷入磁盘过程

    1.redo log基本概念 redo log的相关概念这里就不再过多阐述,网上有非常多的好的资料,可以看下缥缈大神的文章:https://www.cnblogs.com/cuisi/p/652507 ...

  5. Mysql InnoDB Redo log

    一丶什么是redo innodb是以也为单位来管理存储空间的,增删改查的本质都是在访问页面,在innodb真正访问页面之前,需要将其加载到内存中的buffer pool中之后才可以访问,但是在聊事务的 ...

  6. mysql事务(一)——redo log与undo log

    数据事务 即支持ACID四大特性. A:atomicity          原子性——事务中所有操作要么全部执行成功,要么全部执行失败,回滚到初始状态 C:consistency     一致性—— ...

  7. MySQL如何计算统计redo log大小

      在MySQL中如何计算.统计重做日志(redo log)的生成情况呢? 例如10分钟内,生成了多少M的redo log呢?30分钟内又生成了多少M的redo log......MySQL没有像Or ...

  8. 14.2.3 InnoDB Redo Log

    14.2.3 InnoDB Redo Log 14.2.3.1 Group Commit for Redo Log Flushing redo log 是一个基于磁盘数据结构的用于在crash 恢复正 ...

  9. 谈谈传说中的redo log是什么?有啥用?

    目录 一.引出 redo log 的作用 二.思考一个问题: 三.redo log block 四.redo log buffer 五.redo log的刷盘时机 六.推荐参数 七.redo log ...

随机推荐

  1. angular2的模板语法

    Angular 应用管理着用户之所见和所为,并通过 Component 类的实例(组件)和面向用户的模板来与用户交互. 从使用模型-视图-控制器 (MVC) 或模型-视图-视图模型 (MVVM) 的经 ...

  2. centos /data目录扩容

    /data盘被日志撑死了,必须扩容 有一块现成的100G的/dev/sdb盘,但是mount到了/data/test目录下,而且还有应用程序在上面进行读写操作 1.先查看哪些应用程序 在占用磁盘 #f ...

  3. ios 汽车品牌展示案例

    汽车组模型 // ZQRGroup.h #import <Foundation/Foundation.h> @interface ZQRGroup : NSObject /** *组标题 ...

  4. 解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_name, customer)

    在学习hibernate一对多映射关系时,根据视频学习的时候,例子是顾客和订单的问题,一个顾客有多个订单.按照视频中的敲代码出现了You have an error in your SQL synta ...

  5. 解决Detected problems with API compatibility...

    如果是10.3.0那么targetsdk改28.

  6. Unknown parameter datatype UNKNOW send from server.

    procedure Tmainform.Button7Click(Sender: TObject); begin kbmMWClientQuery3.Query.Text:='insert into ...

  7. scrapy面试一

    1.动态加载又对及时性要求很高怎么处理? Selenium+Phantomjs 尽量不使用 sleep 而使用 WebDriverWait 2.分布式爬虫主要解决什么问题? (1)ip (2)带宽 ( ...

  8. python day05 作业答案

    1. b.不可以 c.tu=("alex",[11,22,{"k1":"v1","k2":["age" ...

  9. Android内核sys_setresuid() Patch提权(CVE-2012-6422)

    让我们的Android ROOT,多一点套路. 一.简单套路 CVE-2012-6422的漏洞利用代码,展示了另一种提权方法.(见附录) 这也是一个mmap驱动接口校验导致映射任意内核地址的洞.将内核 ...

  10. HTTP基本原理(转)

    1. HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使网络传输减少. ...