redo log 和 undo log

简介: redo log 和 undo log

公众号merlinsea


背景



   在数据库事务的机制中,mysql需要保证事务的原子性,一致性,持久性。原子性就是要同一个事务中的若干条sql语句要么同时成功要么同时失败,失败以后要恢复事务开启之前的数据,这就是undo log所负责解决的问题。一致性和持久性是说事务要从一个状态转变到另一个状态,但数据库执行器实际上还是对buffer pool内存的操作,因此可能存在内存没刷到磁盘的时候就崩溃的情况发生,这就是redo log 所负责解决的问题。


undo log介绍



   作用:记录事务变更前的状态。操作数据之前,先将旧数据备份到undo log,然后进⾏数据修改,如果出现错误或⽤户执⾏了rollback语句, 则系统就可以利⽤undo log中的备份数据恢复到事务开始之前的状态。


   内容:逻辑格式的⽇志,在执⾏undo的时候,仅仅是将数据从逻辑上恢复⾄事务之前的状态,⽽不是从物理页⾯上操作实现的。

   ⽂件位置:位于数据库的data⽬录下的ibdata

   解决的问题:解决了事务的原子性问题。


redo log介绍



   作用:记录事务变更后的状态。在事务提交前,只要将redo log持久化即可,数据在内存中变更。当系统崩溃时,虽然数据没有落盘, 但是redo log已持久化,系统可以根据redo log的内容,将所有数据恢复到最新的状态。


   内容:物理格式的⽇志,记录的是物理数据⻚⾯的修改的信息。

   ⽂件位置:位于数据库的data⽬录下的ib_logfile1&ib_logfile2


redo log相当于是数据库最新数据的一个快照,那么触发将数据库中redo log缓存持久化到文件的事件是什么呢?

640.jpg


  上面存在一个现象就是redo log会随着时间的积累越来越大,因此引入了一个check point机制,即将redo log日志文件中已经被同步的数据打上标记,定期将point之前已经同步的数据删除。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
SQL 存储 关系型数据库
redo log 的执行流程?
redo log 的执行流程?
|
1月前
|
存储 SQL 关系型数据库
[MySQL]事务原理之redo log,undo log
[MySQL]事务原理之redo log,undo log
|
1月前
|
SQL 缓存 关系型数据库
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
66 0
|
2月前
|
数据库
redo log日志格式
redo log日志格式
|
2月前
|
存储 监控 关系型数据库
MySQL Redo Log解密:事务故事的幕后英雄
MySQL Redo Log解密:事务故事的幕后英雄
25 0
|
2月前
|
监控 安全 数据库
Binlog vs. Redo Log:数据库日志的较劲【高级】
Binlog vs. Redo Log:数据库日志的较劲【高级】
80 0
|
2月前
|
存储 缓存 关系型数据库
Binlog vs. Redo Log:数据库日志的较劲【基础】
Binlog vs. Redo Log:数据库日志的较劲【基础】
179 0
|
25天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
81 1
|
26天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
30天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
100 1