一 简介: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 文件开头记录 用来记录已经执行CKPT到达一致的位置点,是不断更新的2 LSN号和位置
mtr_commit执行时会给每个log record生成一个lsn,此lsn确定了其在log file中的位置,会在指定位置进行加锁,直到此事务进行写入3 LSN与故障恢复
1 LSN类型为文件开头记录的位置为check point三者一致的位置点,之后进行整体重做或者回滚
2 redo 记录LSN号和 page lSN号会进行对比
九 具体的记录内容
1 DML操作导致的页面变化,均需要记录Redo日志
2 聚簇索引/二级索引/Undo页面修改,均需要记录Redo日志;