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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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的逆过程。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql

“mysql:日志,redo,undo,为什么使用日志?” 的相关文章