2020-12-15:mysql的回滚机制是怎么实现的?

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-12-15:mysql的回滚机制是怎么实现的?相关的知识,希望对你有一定的参考价值。

 福哥答案2020-12-15:

[答案来自此链接:](https://www.cnblogs.com/ld-swust/p/5607983.html)

mysql 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。


MySQL的事务是有redo和undo的,redo操作的所有信息都是记录到 redo_log中,也就是说当一个事务做commit操作时,需要先把这个事务的操作写到redo_log中,然后再把这些操作flush到磁盘上,当 出现故障时,只需要读取redo_log,然后再重新flush到磁盘就行了。


而对于undo就比较麻烦,MySQL在处理事务时,会在数据共享 表空间里申请一个段叫做segment段,用保存undo信息,当在处理rollback,不是完完全全的物理undo,而是逻辑undo,就是说会对之 前的操作进行反操作,但是这些共享表空间是不进行回收的。这些表空间的回收需要由mysql的master thread进程来进行回收。


以上是关于2020-12-15:mysql的回滚机制是怎么实现的?的主要内容,如果未能解决你的问题,请参考以下文章

数据库 为何使用 回滚

mysql命令行下怎样实现数据的回滚操作

简单了解Oracle的回滚段

oracle回滚机制深入研究

mysql数据库事务的回滚操作

git 几种情况的回滚