IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql中redolog和binlog的总结 -> 正文阅读

[大数据]mysql中redolog和binlog的总结

一.redolog

1.redo log的概念

redolog是物理日志,默认大小是4G,记录在某个数据页上做了什么修改。有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。因为redo log 的写入机制是事务中有更新操作时就会将更新操作记录在 redo log buffer 中,在事务提交时,根据相关参数的设定,按照不同逻辑持久化到磁盘文件

2.redo log写入文件的过程简介

redo日志从生成到写入文件要要经历①redo log buffer ②page cache ③redo.file

最后把page cache写入file的时机可以自己设置,默认是已经有一个后台进程每1s进行一次完整的刷盘操作。当 redolog buffer 占用的空间即将达到 innodb_log_buffer_size的一半的时候,后台线程会主动刷盘

3.redo log 可设置的三个刷盘策略

innodb_flush_log_at_trx_commit的参数值作用(后台进程的刷盘和这个参数的刷盘是分别进行的,不冲突):

①0是事务提交后不刷盘,事务提交后日志只写入redo log buffer

②1是事务提交后马上执行完整刷盘(默认)

③2是事务提交后马上把redo log buffer的内容写到page cache

SELECT @@innodb_flush_log_at_trx_commit #查看刷盘策略
SET GLOBAL innodb_flush_log_at_trx_commit=1  #修改刷盘策略

异常情况:

①当参数值为0时,mysql或者服务器挂了,redo log buffer中的数据全部丢失

②当数值为2时,mysql挂了:因为日志数据在page_cache,所以数据不丢失.如果服务器挂了,数据丢失

注意:别忘了后台进程也在执行每1秒执行一次刷盘的操作

4.日志文件组

因为redo log的有点像循环队列的执行过程,其中write pos是记录当前位置,check point记录要擦除的位置,他们之间的空间是可写入数据的空间。环中write pos 写满了,check point就开始擦除了。

注意:每次myslq加载日志文件组恢复数据的时候,会清空加载过的redolog记录

二.binlog

binlog是逻辑日志,属于mysql server层,用于灾难后的数据恢复和mysql的主从复制

1.三种模式

①statement :记录原始sql语句

②row:记录数据值

③mixed:statement和row两种混合使用

注意:statement模式由于是记录sql语句,所以比如当sql语句中用now()函数时会导致恢复的日期数据不一致,此时用row可以解决这个问题但是用row模式需要更大的空间来存储,恢复和同步更消耗IO性能。此时用mixed可以解决这个问题,mixed模式下会自动判断sql语句是否会引起数据不一致,如果会就用row模式,反之就用statement模式

2.刷盘时机
事务执行过程中,先把日志写到binlog cache,如果事务太大则会用额外写入磁
盘空间。当事务提交的时候再写到page cache,最后再fsync到binlog
我们可以通过参数binlog_page_size控制单个线程 binlog cache 大小,如果存
储内容超过了这个参数,就要暂存到磁盘

参数sync_binlog控制fsync的时机:
①sync_binlog=1时,每次事务提交都把数据持久化到磁盘
②sync_binlog=0时(默认值),每次事务提交都只把内容写到page?cache,持久化到磁盘的时
机由系统控制
③sync_binlog=n时,是当事务每次提交都只写到page?cache积累了n个之后才持久化到磁

几个重要的参数:
①sync_binlog:决定刷盘时机,控制二进制日志被同步到磁盘前二进制日志提交组的数量4
②max_binlog_size:binlog文件的最大容量
③binlog_cache_size:在事务中binlog的缓存大小

三.redolog和binlog的区别


①redolog具有crash-safe的能力,而binlog没有。
②redolog是记录在数据页上做了什么修改,而binlog记录的是语句的原始逻辑
③redolog是循环写(前面的图片已经说的很清楚了),所以binlog存在数据覆盖的问题,binlog
是追加写,一个binlog文件写满了就会再创建一个binlog文件写,所以binlog是归档日志
④binlog是事务提交的时候才从binlog?cache写到binlog,而redolog有后台每1秒自动刷
盘的功能,在这点上保证了事务即使未提交时发生崩溃也能完好的恢复事务中的数据
⑤binlog属于server层,redolog属于innodb引擎特有的
四.两阶段提交
两阶段提交是为了保证redolog和binlog数据的一致性
简单来说就是当数据发生更新时,先写redolog,写好后redolog进入prepare状态,再写
binlog,写好binlog后把redolog改成commit状态。如果binlog没写好就发生了故障,此时
事务回滚

本文参考自javaguid:MySQL三大日志(binlog、redo log和undo log)详解 | JavaGuide

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:58:47  更:2022-01-01 14:00:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:32:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码