mysql 原理 ~ redo

Posted danhuangpai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 原理 ~ redo相关的知识,希望对你有一定的参考价值。

一 简介:redo log
二 文件
   ib_logfile0 ib_logfile1 两个redo log 默认为一组 循环覆盖写入
三 相关参数
   innodb_log_file_size=256M 不能太大也不能太小,推荐256M
  innodb_log_file_in_group=16M redo log buffer的大小,不宜太大
  innodb_log_buffer_size=2 日志文件数量默认为2,可根据情况适当调节
四 redo log 与binlog的不同
  1 产生的机制不同
     redo log在innodb引擎层产生
     binlog 在mysql server上层生成
 2 记录的内容类型不一样
    redo log是物理格式日志,记录着每个页的修改的逻辑操作,所以具体来说 redo log记录的是逻辑物理操作
    binlog 是逻辑格式日志,仅仅记录着执行的sql语句,属于逻辑操作
 3 mysql redo+binlog共同构成了一个完整事务的提交,俗称二阶段提交,通过共有的xid方式确定事务的完整性
六 redo log的特点
 1 redo追加是顺序写入
 2 redo_log_buffer->redo_log_file 事务生成redo log到文件的方式
 3 并发事务
   1 并发的事务共享redo_log_buffer,它们的Redo Log按语句的执行顺序,依次交替的记录在一起,
   eg:记录1: <trx1, insert …>
        记录2: <trx2, update …>
        记录3: <trx1, delete …>
        记录4: <trx3, update …>
  2 并发的事务通过加锁的方式保证事务的顺序写入,直到8.0才实现无锁化的顺序写入
  3. 因为C的原因,当一个事务将Redo Log写入磁盘时,也会将其他未提交的事务的日志写入磁盘。
  4. Redo Log上只进行顺序追加的操作,当一个事务需要回滚时,它的Redo Log记录也不会从Redo Log中删除掉。
七 redo log buffer刷新机制
  1 事务提交时候(commit=1)
  2 当log buffer中有一半的内存空间已经被使用
  3 当无法进行覆盖log文件时,触发check point机制
八 LSN号
 1 具体说明
   Log sequence number log_buffer_lsn 缓存记录
  Log flushed up to log_file_lsn 文件记录
  Last checkpoint at log_file_start_lsn  文件开头记录
2 LSN号和位置
  mtr_commit执行时会给每个log record生成一个lsn,此lsn确定了其在log file中的位置,会在指定位置进行加锁,直到此事务进行写入

3 LSN与故障恢复 

   1 LSN类型为文件开头记录的确定位置,之后会根据page lsn号与redo中的lsn号进行对比,决定重做还是回滚

以上是关于mysql 原理 ~ redo的主要内容,如果未能解决你的问题,请参考以下文章

Mysql原理篇之redo日志--下--10

mysql 原理 ~ redo

MySQL事务日志Redo_Log之Crash_Safe原理和事务两阶段提交原理

MySQL事务原理

MySQL事务原理

MySQL DBA xtrabackup原理(十六)