InnoDB事务日志之重做日志redo log与回滚日志undo log

最近在看《mysql技术内幕》一些笔记记录在这里。

其实存储引擎优化思想就是想方设法地去解决cpu速度和磁盘速度不匹配的问题,以及怎么样防止数据库宕机导致的数据丢失。

那么为了解决cpu和磁盘速度不匹配的问题,数据库设置了一个缓冲池:当要修改数据时,想磁盘中的数据拷贝到内存的缓冲池中,然后修改缓冲池中的数据,最后再在某一时刻刷回磁盘。

为了防止刷回磁盘的过程中意外宕机的数据丢失,innodb中,采用使用日志的方式:Write Ahead Log策略。通过先写日志再写数据的方式:但事务提交时,先写重做日志,再修改页。然后再次开机恢复数据库时,可以通过重做日志来恢复以及提交的事务,继续完成上次的事务。但是还可能是数据库宕机时事务还未提交,这时候就需要回滚日志undo log来回滚事务到事务开始前的状态。

1.重做日志redo log

用于在实例故障恢复时,继续那些已经commit但数据尚未完全回写到磁盘的事务。

2.回滚日志undo log

用于在实例故障恢复时,借助undo log将尚未commit的事务,回滚到事务开始前的状态。

猜你喜欢

转载自www.cnblogs.com/shawshawwan/p/9092842.html