redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB会使用redo log恢复到掉电前的时刻,保证数据的完整性。
//查看innodb_log_buffer_size
show variables like'innodb_log_buffer_size';
innodb_log_buffer_size默认是16M,就是redo log缓冲区的大小,它从事务begin之后,开始记录redo log,若事务比较大,为了避免事务执行过程中花费过多磁盘I/O。可以设置比较大的redo log缓存,节省磁盘I/O。
InnoDB修改操作数据,不是直接修改磁盘上的数据,实际只是修改Buffer Pool中的数据,InnoDB总是先把Buffer Pool中的数据改变记录到redo log中,用来进行崩溃后的数据恢复。优先记录redo log,然后再慢慢的将Buffer Pool中的脏数据刷新到磁盘上。
数据刷新到磁盘的过程中,出现掉电等异常情况,下一次mysqld服务重启后,会根据redo log里面记录的数据,进行数据恢复!!!(undo log也要记录在redo log中!!!)
innodb_log_group_home_dir指定的目录下的两个文件:ib_logfile0,ib_logfile1,该文件被称为重做日志。
buffer pool缓存池:加速读和加速写,直接操作data page,写redo log修改就算完成,有专门的线程去做把buffer pool中的dirty page(脏页)写入磁盘。