https://blog.csdn.net/Weixiaohuai/article/details/117867353
undo log 的存储由 InnoDB 存储引擎实现,数据保存在 InnoDB 的数据文件中。在InnoDB 存储引擎中,undo log 是采用分段(segment)的方式进行存储的。rollback segment 称为回滚段,每个回滚段有 1024 哥 undo log segment。在MySQL5.5之前,只支持 1 个 rollback segment,也就是只能记录 1024 个 undo 操作。在MySQL5.5之后,可以支持128个rollback segment,分别为 resg slot0 - resg slot 127,每一个 resg slog,也就是每一个回顾段,内部由 1024 个 undo segment 组成,即总共可以记录 128 * 1024 个 undo 操作。
下面以一张图来说明undo log日志里面到底存了哪些信息?
如上图,可以看到,undo log 日志里面不仅存放着数据更新前的记录,还记录着 Row ID、事务 ID、回滚指针。
其中事务 id每次递增,回滚指针第一次如果是 insert 语句的话,回滚指针为 NULL,第二次 update 之后 undo log 的回滚指针就会指向刚刚那一条 undo log 日志,以此类推,就会形成一条 undo log 的回滚链,方便找到该条记录的历史版本。