本文作者:kris

基于Redo Log和Undo Log的MySQL崩溃恢复解析-mysql崩溃 recovery

kris 2025-01-14 18:54:04 2
基于Redo Log和Undo Log的MySQL崩溃恢复解析-mysql崩溃 recovery摘要: ORACLE中,数据库的redo与undo分别是什么呀,两者是什么关系呢?会事务处理过程update 或Insert操作:1.计算更新后tuple到原tuple的delta信息,把...

ORACLE中,数据库的redo与undo分别是什么呀,两者是什么关系呢?

事务处理过程

update 或Insert操作:

1.计算更新后tuple到原tuple的delta信息,把这个delta复制到回滚段,作为undo;

2.写redo日志,记录对回滚段的更改,回滚段也是由缓冲区管理机构管理,也是相当于对页面(page)的更改;

基于Redo Log和Undo Log的MySQL崩溃恢复解析-mysql崩溃 recovery

图片来源:网络

3.把缓冲区中的对应tuple更新成新值,把新值的rollback pointer写入undo(更改回滚段);

4.写redo日志,记入对页(回滚段)的更改;

5.将被更改的页面的状态改成dirty,表示要被刷盘

事务提交操作:

日志刷盘,当前事务的对应的最后的LSN(Log Sequence Number)之前的redo日志都被写入持久化存储。

崩溃恢复过程

1.启动开始时,检测是数据库在上次退出时是否发生崩溃;

2.定位到最近的一个检查点(checkpoint);

3.定位在这个检查点时刷磁盘的数据页,检查校验checksum。如果不正确,说明这个页在上次写入是不完整的,从双写缓冲(doublewrite buffer)里把正确的页读出来,更新到内存缓冲区中的页;

4.顺序地(从上个检查点开始到最后一个LSN)分析redo日志,标识出未提交事务;

5.顺序执行redo,这些redo日志不仅包含对数据段的更改(写tuple), 也包括对回滚段的更改(写undo log);

6.回滚所有未提交的事务。

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/23426.html发布于 2025-01-14 18:54:04
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享