文章目录
- 前言
- 日志
- undo log
- redo log
- bin log
- 总结
前言
今天来分享一下MySQL日志。
日志
MySQL 的日志分为 undo log(回滚日志)、redo log(重做日志)、bin log(归档日志),三中日志的功能各有不同。其中属于 InnoDB 的是undo log 和 redo log,对Innodb 不熟悉的可以看这篇 MySQL 的存储引擎(基本介绍)
接下来给大家介绍一下这三种日志。
undo log
undo log,回滚日志,作用为实现了事务的原子性,主要用于事务的回滚。确保事务要么全部执行成功,要么全部执行失败。
Innodb 的 MVCC 机制也需要用到 undo log,每一个隐藏列的 roll_pointer 连接 undo log。从而形成版本链。
undo log 是在事务的回滚中使用到的。也就是说它是记录着事务开启前(更新前)的数据。在执行回滚的时候根据undo log 中的数据执行相反的操作。比如对一条数据进行增加,回滚时就根据undo log 中的记录将相应的数据进行删除。
redo log
redo log,重做日志。作用是实现事务的持久性,即永久性的改变数据,也可以用于在崩溃中恢复数据。
redo log 是记录事务提交后的数据,如果在执行完事务之后完成系统崩溃,可以根据redo log 日志来恢复数据。
bin log
bin log 是 MySQL 自带的日志,存在 server 层。
bin log 也是在事务提交会后记录相应的数据。这不与 redo log 起冲突了吗?为什么呢?
因为早期 MySQL 的存储引擎是 MyISAM ,MyISAM 没有 redo log,没有 crash-safe功能,就是没有崩溃之后恢复的功能。bin log 日志只能用来归档。
所以 Innodb 在早期以插件的形式来引入 MySQL,并新增 redo log 来实现崩溃之后恢复的功能即 crash-safe 功能。
bin log 的作用就是实现数据的复制与迁移。备份恢复,主从复制。redo log 的功能是用于系统崩溃后的恢复。
总结
介绍了三种日志,稍微总结一下。
undo log,回滚日志,作用为实现了事务的原子性,主要用于事务的回滚和MVCC机制。记录着事务开启前(更新前)的数据。在执行回滚的时候根据undo log 中的数据执行相反的操作。
redo log,重做日志。作用是实现事务的持久性,用于在崩溃中恢复数据。
bin log 是 MySQL 自带的日志,存在 server 层。作用备份恢复,主从复制。
有启发点个赞 🌹
好文章不要错过,最近給大家分享的文章:MySQL 专栏
本篇参考:小林coding
预计下篇开启:Redis 专栏。
我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…