重做日志(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事务(一)——redo log与undo log

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

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

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

  7. 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 恢复正 ...

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

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

  9. mysql redo log

    mysql> show variables like '%innodb_log_file_size%'; +----------------------+-----------+ | Varia ...

随机推荐

  1. 关于jQuery外部框架

    (function(window, undefined) {         var jQuery = ...         ...             window.jQuery = wind ...

  2. XMLParser解析xml--内容源自网络(在静态库中不能用GDATA来解析,因为静态库不能加动态库)

    </Books> 从其文档结构我们可以看出,要定义一个Book实体类描述具体的书籍信息,其中用于存储的相关xml文档元素的实例变量与对应元素同名(本例:title.author.summa ...

  3. hdu 4521 线段树改点求点的应用

    小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  4. StringBuffer工具类整理(一)

    package com.gzcivil.utils; /** * 同StringBuffer * * @author Dragon * @time 2013-3-1 */ public class S ...

  5. idea jdk版本问题

    问题描述: Information:Using javac 1.6.0_43 to compile java sourcesInformation:java: Errors occurred whil ...

  6. pom.xml中添加远程仓库

    maven的pom.xml中添加远程仓库 <repositories> <repository> <id>mvnrepository</id> < ...

  7. freerradius 错误:pap: WARNING: No &quot;known good&quot; password found for the user

    具体错误如下: 1) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default(1)   a ...

  8. VHDL 乐曲演奏电路设计

    前言 无源蜂鸣器在直流信号下不会响,需要方波驱动.输入不同频率的方波会发出不同音调的声音,方波的幅值决定了声音的响度. 目标 乐曲发生电路在节拍(4Hz)的控制下根据乐谱产生合适的分频系数.分频器根据 ...

  9. matt cutts : try something new for 30 days

    30 天尝试新事物matt cutts : try something new for 30 days[小计划帮你实现大目标] 是否有些事情, 你一直想去做, 但就是没有实现?马特 ?卡茨建议: 尝试 ...

  10. Linux系统安装workerman,启动wss 服务

    安装workerman其实很简单,只要会简单的linux口令就可以搞定, 这里我给大家演示一下如何安装workerman 进入终端的过程就不用演示了吧... 输入root及密码进入终端后找到站点根目录 ...