Redian新闻
>
还分不清bin log 、redo log 跟 undo log?

还分不清bin log 、redo log 跟 undo log?

公众号新闻


前言

MySQL 日志包含了错误日志、查询日志、慢查询日志、事务日志、二进制日志等,如果存储引擎使用的是 InnoDB ,二进制日志(binlog)和事务日志(包括redo log和undo log) 是肯定绕不过去的,本篇接下来详细为大家介绍这三种日志。

redo log

为什么要有 redo log ?

我们都清楚,事务的四大特性其中有一个是持久性,简单的说就是只要事务提交成功,对数据库做的修改就会被永久保存下来,不会因为任何原因再回到原来的状态。

MySQL 是怎么样保证持久性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新回磁盘中,可是这么做存在严重的性能问题:

  1. 单个事务可能涉及修改多个数据页,并且数据页在物理上并不连续,使用随机IO写入性能太差。
  2. Innodb是以页为单位进行磁盘交互的,一个事务有可能只会修改一个数据页中的几个字节,如果这时候将完整的数据页刷回磁盘的话,很浪费资源。

因此 MySQL 设计出了redo log,当一条记录更新的时候, InnoDB 引擎会先把记录写到 redo log 里面去,同时更新内存,这样就算这条数据更新成功了,完美地解决了性能问题(文件更小并且是顺序IO)。

注意此时数据并没有更新到磁盘上,InnoDB 会在恰当的时候把这条记录更新到磁盘上去。这种先写日志然后再将数据刷盘的机制,有个专有名词——WAL(Write-ahead logging)。

redo log 如何刷到磁盘的呢?

redo log包含两部分:

  • 内存中的日志缓冲(redo log buffer)
  • 磁盘上的日志文件(redo log file)

每执行一条DML语句,数据库先将记录写入redo log buffer,然后后续某个时间点再一次性将多个操作记录写到redo log file。MySQL 一共支持三种写入redo log file的时机,通过参数 innodb_flush_log_at_trx_commit 进行配置,如下图所示:

bin log

bin log 是 MySQL 的逻辑日志,由Server层进行记录,用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。无论你使用的是任何的存储引擎,mysql数据库都会记录binlog日志。

与redo log日志一样,binlog也有自己的刷盘策略,通过sync_binlog参数控制:

  • 0 :每次提交事务前将binlog写入os cache,由操作系统控制什么时候刷到磁盘
  • 1 :采用同步写磁盘的方式来写binlog,不使用os cache来写binlog
  • N :当每进行n次事务提交之后,调用一次fsync() os cache中的binlog强制刷到磁盘

bin log 和 redo log 都用于记录的修改之后的值,那么它们之间究竟有什么区别呢?

redo log 和 binlog 的区别

主要有以下三方面:

  1. binlog 是 MySQL 的 Server 层实现的,所有的引擎都是可以的。redo log是InnoDB的日志。如果不使用InnoDB引擎,是没有redo log的。
  2. binlog是逻辑日志,记录的是对哪一个表的哪一行做了什么修改;redo log是物理日志,记录的是对哪个数据页中的哪个记录做了什么修改,可以理解为对磁盘上的哪个数据做了修改。
  3. redo log 是有固定大小的,所以它的空间会用完,如果用完的话,一定要进行一些写入磁盘的操作才可以继续; binlog 是可以追加写入的,也就是 binlog 没有空间的概念,一直写就行了

undo log

数据库事务四大特性中有一个是原子性,原子性指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。实际上,原子性底层就是通过undo log实现的。

undo log主要记录了数据的逻辑变化,比如一条UPDATE语句,对应一条相反UPDATE的undo log,一条INSERT语句,对应一条DELETE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态。

undo log 同时也是MVCC(多版本并发控制)实现的关键。

总结

  • redo log是InnoDB存储引擎的一种日志,主要作用是崩溃恢复,刷盘策略参数 innodb_flush_log_at_trx_commit 推荐设置成2。
  • binlog是MySQL Server层的一种日志,主要作用是归档。
  • undo log是InnoDB存储引擎的一种日志,主要作用是回滚。

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
很多人分不清!“账号”“帐号”上热搜,专家回应→看热闹不怕事儿大翘臀?骨盆前倾?傻傻分不清楚。核辐射用什么传感器检测?核辐射检测仪/传感器傻傻分不清?(不一样!)九剑一魂 - 第24回 汉胡同源 九剑一魂(五)“突然分不清我和智障的区别了...”这游戏震撼我全家!分不清梦境和现实?只因大脑想象与视觉功能由同一区域负责 | Nature子刊还在傻傻的分不清Linux的文件权限吗?这种疾病极易和4类风湿病分不清!但主任一眼看穿……傻傻分不清!!双胞胎姐妹与双胞胎兄弟交往,自爆经常认错对方.....西瓜分不清楚?一文带你看全精选岗位 | ByteDance、Red Hat 、IBM公司岗位发布!帕拉伊巴,拉贡碧玺,傻傻分不清?——“大王私房课系列二”第75期还分不清CSR、ESG?点进来一目了然布洛芬vs对乙酰氨基酚分不清?这些宝宝退烧用药原则你必须知道!还在傻傻的分不清 Linux 的文件权限吗?束粉红宝粉蓝宝傻傻分不清?你不是一个人~ ——“大王私房课系列二”第61期《不完美受害人》:成功和赵寻,分不清谁是受害人?冰淇淋、雪糕、冰棍傻傻分不清?一篇说清楚→Redmi 新机再曝,Redmi Note 13、Redmi K70期待哪款?Hundreds of Chinese Arrested For Cyberscams in Laos, Myanmar你好,我是筚(bì)篥( lì)!首个Unified Redis Release,Redis影响最深远的版本发布OpenAI的文本分类器悄悄停用:它们也分不清AI生成的内容了笑谈邂逅(4)章熊先生激励我不断前行阿里裁员7%,是偶然还是必然?海淘为什么出海不成功但是拼多多却成功了?傻傻分不清!是“账号”还是“帐号”?国家语委最新回应历史名城:耶路撒冷起猛了,马和长颈鹿傻傻分不清楚......湿疹和痱子分不清?这招教你轻松辨别Unprecedented Rain in Central China Wreaks Havoc on Wheat Fields【$200+5%超市加油 开卡奖励】Chase Freedom Unlimited (CFU) 信用卡汤姆克鲁斯和替身合照被疯传,网友:这也太像了!分不清精选SDE岗位 | Tesla、Apple、Red Hat Software公司岗位发布!硕士学位傻傻分不清?MSc、MA、MPhil、MRes...到底是什么?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。