binlog,redolog,undolog Mysql三种日志的作用和区别( 三 )


啥是回滚和前滚?(1)回滚未提交的事务,即事务未执行 commit 。但事务内修改的脏页中,有一部分已刷盘 。此时数据库宕机重启,需要回滚来将先前那部分已经刷盘的脏块从磁盘上撤销 。(2)前滚未完全提交的事务,即事务已经执行 commit,但该事务内修改的脏页中只有一部分数据被刷盘,另一部分还在 buffer pool,此时数据库宕机重启,就要用前滚来将未来得及刷盘的数据从 redo log 中恢复出来并刷盘 。
undo log记录内容在Mysql里数据每次修改前,都首先会把修改之前的数据作为历史保存一份到undo log里面的,数据里面会记录操作该数据的事务ID,然后我们可以通过事务ID来对数据进行回滚 。

经验总结扩展阅读