一、undo log(回滚日志)
1.作用:
(1)保证了事物的原子性(undo log 和 redo log 记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时, undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录)
(2)通过read view和undo log实现mvcc多版本并发控制(MySQL 在执行快照读(普通 select 语句)的时候,会根据事务的 Read View 里的信息,顺着 undo log 的版本链找到满足其可见性的记录)
2.在事物提交前,记录更新前的数据到undo log里,回滚的时候读取undo log来进行回滚
3.undo log格式有一个rtx_id(上一次事务修改的id)和roll_ptr(指向需要回滚的版本)
二、redo log
1.作用:保证事务的持久性
2.WAL(write-ahead logging)先写日志技术:MySQL的写操作不是立即写到磁盘上的,而是先写到buffer pool里的缓存页生成脏页,再将脏页产生的变化写入到redo log buffer中,事务提交的时候将redo log buffer中内容循环写到磁盘中的redo log file中。后续innoDB引擎在适当的时候由后台线程将buffer pool中的脏页刷新到磁盘中。如果由于意外脏页数据没有持久化,可以根据redo log恢复数据到最新状态。
3.redo log的磁盘操作是顺序写,比直接写数据用的随机写更高效。
三、binlog(在server层而不是存储引擎层)
1.作用:用于备份(记录全量日志,不小心整个数据库的数据被删除了)、主从复制
参考:图解MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-03-10 Mockingbird_pyqt5_ui修改(一)