音乐网站开发案例,社区网站建设工作职责,微博个人网页设计模板,搜索引擎搜索redo log#xff08;重做日志#xff09;redo log 是什么redo log 的主要作用Redo 的组成redo如何保证 事务的持久性 undo log#xff08;撤销日志/回滚日志#xff09;undo log 是什么redo log 的主要作用undo的存储位置 如何区分 redo log和undo log感谢 #x1f496;参… redo log重做日志redo log 是什么redo log 的主要作用Redo 的组成redo如何保证 事务的持久性 undo log撤销日志/回滚日志undo log 是什么redo log 的主要作用undo的存储位置 如何区分 redo log和undo log感谢 参考 首先事务有四大特性原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability。 一个事务要么全部执行要么全部不做。事务的隔离性由锁机制实现原子性、一致性和持久性由事务的redo 日志和undo 日志来保证。
先来分别看看redo log和 undo log
redo log重做日志
redo log 是什么
redo log主要是物理Redo日志记录的是数据页的物理变化。即对数据库的所有修改包括插入、更新和删除操作。能够保证事务的持久性和一致性。
redo log 的主要作用
redo log的主要作用是用于数据库的崩溃恢复。可以根根据edo log中记录的信息进行重新应用以恢复到故障点之前。
Redo 的组成
Redo log可以简单分为以下两个部分
一是在内存中会有一个重做日志缓冲 (redo log buffer)在修改完数据后将新的数据写入磁盘中之前会现在内存中的redo log buffer中记录下来。不过它是是易失的二是磁盘中会有一个重做日志文件 (redo log file)当事务commit时。会将redo log buffer中的内容刷新到 redo log file。这里的数据是持久的
所以我们知道在内存中修改完数据页之后这个时候还没有将这个数据页刷如磁盘这个页就叫脏页dirty page。这个时候会在内存中的redo log buffer写入redo日志记录的是数据被修改后的值。这里注意在内存中是先修改数据页再写日志。接着会将内存中的redo日志写会磁盘中的redo log file之后再将脏页刷入磁盘。
redo如何保证 事务的持久性
1.写入磁盘的顺序和持久性在事务执行期间MySQL首先将事务的更改写入Redo log缓冲区然后异步将Redo log缓冲区的内容定期刷新到磁盘上的Redo log文件中。这个过程是按顺序执行的确保了Redo log的顺序性。即使在事务提交之前Redo log的内容也已经被持久地写入磁盘。这确保了即使系统崩溃已提交的事务的更改也可以被重放从而维护数据库的一致性 2. Redo log文件的循环写入Redo log文件是循环写入的一旦一个Redo log文件写满MySQL会开始写入下一个。如果系统运行足够长的时间旧的Redo log文件可能被覆盖。然而在写入新的Redo log文件之前MySQL会确保将所有相关的更改写入磁盘以保证已提交的事务的持久性 3. 恢复过程如果MySQL发生故障如崩溃或断电系统会在重新启动时执行恢复过程。在这个过程中MySQL会检查Redo log文件找到最后一个已经提交的事务然后从Redo log中重新执行这些事务的更改以将数据库恢复到一致的状态。这确保了在故障后数据库可以重新回到最后一个一致的状态
undo log撤销日志/回滚日志
undo log 是什么
undo log是逻辑日志主要记录的是数据的逻辑变化为了在发生错误时回滚之前的操作需要将之前的操作都记录下来然后在发生错误时才可以回滚。
redo log 的主要作用
undo日志只将数据库逻辑地恢复到原来的样子在回滚的时候它实际上是做的相反的工作比如一条INSERT 对应一条 DELETE对于每个UPDATE,对应一条相反的 UPDATE,将修改前的行放回去。undo日志用于事务的回滚操作进而保障了事务的原子性
undo的存储位置
在InnoDB存储引擎中undo存储在回滚段(Rollback Segment)中,每个回滚段记录了1024个undo log segment而在每个undo log segment段中进行undo 页的申请在5.6以前Rollback Segment是在共享表空间里的5.6.3之后可通过 innodb_undo_tablespace设置undo存储的位置
如何区分 redo log和undo log 目的和功能 Redo Log (重做日志) 主要用于数据库的持久性和恢复记录了对数据的实际更改以便在系统崩溃时能够重新执行这些更改确保数据的一致性和持久性。它是用于恢复的以保证数据的可恢复性Undo Log (撤销日志) 主要用于事务的隔离性、回滚和多版本并发控制 (MVCC)记录了对数据的逆操作以便能够回滚事务或提供读一致性视图。它是用于维护事务的隔离性和一致性的 存储位置和方式 Redo Log 存储在独立的redo log文件中通常是多个文件用于记录事务的持久性更改。这些文件是循环写入的以便不断覆盖旧的redo log记录Undo Log 存储在表空间中通常是InnoDB存储引擎的一部分用于记录事务的逆操作以便回滚或提供读一致性视图 记录的内容 Redo Log 记录了对数据的实际更改包括插入、更新和删除操作的详细信息以便能够重放这些更改Undo Log主要记录了数据的逻辑变化比如一条INSERT语句对应一条DELETE的undo log对于每个UPDATE语句对应一条相反的UPDATE的undo log这样在发生错误时就能回滚到事务之前的数据状态 使用场景 Redo Log 在数据库崩溃或故障时用于恢复数据到最新一致状态Undo Log 用于事务的隔离性、回滚和MVCC实现以确保事务之间的数据隔离和一致性
感谢
好啦这次的分享就到这里感谢大家看到这里
参考
https://www.jianshu.com/p/20e10ed721d0 https://zhuanlan.zhihu.com/p/190886874