mysql:日志,redo,undo,为什么使用日志?

MySQL通过redo日志确保事务的持久性,即使在事务提交后数据未写入磁盘发生故障,也能通过日志恢复。redo日志是顺序写入,包含在内存的redologbuffer和硬盘的redologfile中。undo日志则保证事务的原子性,用于回滚事务,是逻辑日志,记录数据的旧状态以备回滚。
摘要由CSDN通过智能技术生成

mysql日志

mysql事务的隔离性是通过锁来实现的
而原子性,一致性,持久性就是通过日志来实现的。
REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持
久性。
UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。

REDO日志

为什么存在redo日志?
当我们事务提交了,但是数据还没来得及写到数据库的时候就断电了,写入失败。
这样就违背了事务的持久性原则,那么怎么解决?
1,在事务提交前就将数据写入磁盘,然后再commit。
这样io次数多了,但是起码保证了数据持久性
2,在事务提交的时候,将修改的数据存到日志中,一旦断电了,也可以恢复,这样就不用一直io。
好处:
redo日志降低了刷盘频率
redo日志占用的空间非常小
特点:
redo日志是顺序写入磁盘的
事务执行过程中,redo log不断记录
组成:
重做日志的缓冲 (redo log buffer) ,保存在内存中,是易失的。
重做日志文件 (redo log file) ,保存在硬盘中,是持久的。
redo的整体流程
在这里插入图片描述
第1步:先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝
第2步:生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值
第3步:当事务commit时,将redo log buffer中的内容刷新到 redo log file,对 redo log file采用追加
写的方式
第4步:定期将内存中修改的数据刷新到磁盘中

Undo日志

undo log是事务原子性的保证。在事务中 更新数据 的 前置操作 其实是要
先写入一个 undo log
情况一:事务执行过程中可能遇到各种错误,比如 服务器本身的错误 , 操作系统错误 ,甚至是突
然 断电 导致的错误。
情况二:程序员可以在事务执行过程中手动输入 ROLLBACK 语句结束当前事务的执行。
以上情况出现,我们需要把数据改回原先的样子,这个过程称之为 回滚 ,这样就可以造成一个假象:这
个事务看起来什么都没做,所以符合 原子性 要求。

undo log是逻辑日志,对事务回滚时,只是将数据库逻辑地恢复到原来的样子。
redo log是物理日志,记录的是数据页的物理变化,undo log不是redo log的逆过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷咕咕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值