浅谈MySQL的redo日志

经常删库跑路的朋友们都知道,MySQL数据库主从同步是通过binlog来实现的,binlog中记录的是MySQL数据库行记录的变化或者是sql语句。MySQL的redo日志记录的是物理页的变化,redo日志用于事务回滚和数据库崩溃恢复。

那么,为什么MySQL数据库不使用redo日志进行主从同步呢?

我想,这是一个半开放式的问题。先来聊聊使用binlog做主从同步的特点。

1、实现跨平台。如果binlog使用statement格式,那么不同操作系统上的数据库都能识别并回放binlog。

2、binlog记录的是数据库的逻辑变化,不论格式是row、statement还是mixed,从库在回放时都不容易出错。

3、binlog是server层管理的,所有的存储引擎都支持binlog功能。

4、binlog日志通过追加的方式不断续写,直到文件大小达到阈值才会切换下一个。

5、事务需要等到提交时,才会开始写binlog日志,因此大小不是固定的。

redo日志的特点。

1、redo日志文件的大小是固定的,一般是16kb。

2、redo日志记录的是MySQL的物理数据页的变化,因此数据库在崩溃恢复的时候,使用redo恢复会很快完成。

3、redo是通过循环写入的方式切换的,假设一组里面设置了5个redo日志,这5个redo日志会循环写入,直到5个日志都写满,又会从头开始覆盖第一个redo日志开始写。

4、redo日志在两阶段提交时,事务一边进行就会一边写redo,不需要等到事务提交才写redo。

5、MySQL数据库目前只有innodb日志支持redo。

既然redo是记录物理页的变化,在强制主从都用innodb存储引擎情况下,如果主从复制用redo进行同步,主库一边执行事务,就会一边写redo日志,等到事务提交时只需要写剩下的一点点redo,即可提交。就能一边回放,一边等待主库提交,并且应用redo日志速度肯定要比binlog速度快。

大家对于MySQL主从同步是使用redo更好还是使用binlog更好,有啥想法呢,欢迎评论区一起交流。

相关推荐
Mr.朱鹏5 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng15 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
云贝贝贝6 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
wxwx_bscxy3226 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向7 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却7 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO9 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记10 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数10 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全