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区别这个知识点可以扩散到其他更详细的知识。

相关推荐
B站计算机毕业设计超人3 小时前
计算机毕业设计制造业MES生产管理平台 MES 生产制造源码+文档+运行视频+讲解视频)
java·spring boot·mysql·eclipse·tomcat·maven·web
m0_748255655 小时前
DuckDB:pg_duckdb集成DuckDB和PostgreSQL实现高效数据分析
数据库·postgresql·数据分析
阿雄不会写代码5 小时前
数据库如何清空重置索引,MySQL PostgreSQL SQLite SQL Server
数据库·mysql·postgresql
Rocket MAN6 小时前
在 Windows 上使用 ZIP 包安装 MySQL 的详细步骤
mysql
潇湘秦7 小时前
Oracle CDB自动处理表空间不足脚本
数据库·oracle
梓沂7 小时前
Oracle中与 NLS(National Language Support,国家语言支持) 相关的参数
数据库·oracle
angen20187 小时前
mysql 存储过程和自定义函数 详解
数据库·mysql
雾里看山7 小时前
【MySQL】 表的约束(上)
android·mysql·adb
m0_748249548 小时前
DRGDIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)
数据库·postgresql·区块链