redo和binlog区别

事务是数据库区别于文件系统的最重要功能,数据库事务支持ACID四个特性,其中I:隔离性是通过锁的方式实现的,剩下的A:原子性 C:一致性 D:持久性是通过redo日志、undo日志、binlog日志来实现的。

我们今天主要来说下在MySQL数据库中redo日志和binlog日志的区别。

先说二者的作用,redo是用于数据库崩溃后恢复的,属于innodb存储引擎特有的功能。binlog用于数据库备份恢复、主从复制,是MySQL的server层面对所有存储引擎都有。

日志提交:MySQL数据库提交一个事务时,通过两阶段提交策略,当事务确认写入到redo日志和binlog日志后,事务才算执行完成。

数据库崩溃恢复过程:当数据库遇到意外崩溃后再次重启,在利用redo日志恢复缓存中的脏数据时,会比较redo日志和binlog日志中的记录,如果事务在binlog中已经记录完成,则直接提交该事务。如果事务在binlog中没有记录,只在redo中存在,则回滚该事务。

总结起来,redo日志和binlog日志区别如下:

1、日志内容不同:redo以数据页的格式记录数据页的物理变化,binlog记录sql语句逻辑变化,也因此数据库崩溃恢复时使用redo速度更快。

2、日志产生时间点不同:redo日志在事务执行过程中就开始写入,binlog日志在事务提交成功之后才开始写入。

3、日志产生位置不同:redo日志由MySQL的innodb存储引擎专有,binlog日志是由server层面产生。

4、日志写入顺序不同:redo日志写入时,由于是在事务执行过程中产生的,且事务支持并发,因此一个redo日志中会随机记录不同事务的redo记录,而binlog日志是在事务提交后才产生,binlog的写入顺序是按照事务提交顺序记录的。

5、刷盘时机不同。

本文仅从宏观上讨论了binlog和redo log的不同,这其中涉及到redo和binlog日志记录格式、redo和binlog两阶段提交策略、数据库崩溃恢复时使用redo和binlog恢复的详细过程还会涉及到double-write、redo日志组、不同的刷盘时机,详细的内容会在后面慢慢追加,记录知识点的过程其实也能帮助我自己梳理一遍知识点,我也是在写这篇文章过程中慢慢意识到,从binlog和redo log区别这个知识点可以扩散到其他更详细的知识。

相关推荐
AllData公司负责人3 分钟前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿11 分钟前
Java开发日志-双数据库事务问题
java·开发语言·数据库
山岚的运维笔记35 分钟前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
Gain_chance37 分钟前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
醇氧1 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
未来之窗软件服务1 小时前
计算机等级考试—高频英语词汇—东方仙盟练气期
数据库·计算机软考·东方仙盟
lekami_兰1 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
JQLvopkk1 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
devmoon3 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
认真的薛薛3 小时前
数据库-sql语句
数据库·sql·oracle