innodb redo log
# 文章概述
对innodb特有的两种日志redo log和undo log中的redo log基本概念、应用场景进行描述。
# 基本概念
redo log是一种write ahead log,事务提交时,先写重做日志再修改页;当由于发生宕机而导致数据丢失时,就可以通过重做日志来完成数据的恢复。
# 写入过程
默认情况,InnoDB存储引擎的数据目录下会有两个名为ib_logfile1和ib_logfile2的文件。每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组下至少有2个重做日志文件。
innodb采用循环写的方式对redo log进行写入,InnoDB存储引擎先写ib_logfile1,当达到文件最后时,会切换至重做日志文件ib_logfile2。
使用图片表示如下:
![yafz6czi5d.png](https://img.haomeiwen.com/i2413244/678f3474e34eafec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
# 相关操作
```mysql
#查看redo log日志状态
SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
#启用 redo log
ALTER INSTANCE ENABLE INNODB REDO_LOG;
```
# 数据恢复
LSN(log sequence number)它是一个不断递增的 unsigned long long 类型整数,用于记录日志序号。通过LSN,可以具体的定位到其在redo log文件中的位置。
下图展示了当数据库在 LSN 为10000时发生宕机,恢复操作仅恢复LSN10000-LSN13000范围内日志
![s65sst15dc.png](https://img.haomeiwen.com/i2413244/5aef3fdece29dd0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
# 参考资料
[mysql8 innodb redo log](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html)