我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql日志系统redolog和binlog介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql日志系统redolog和binlog介绍

首先,我们先来看看一次查询/更新语句流程图

本文会将重点放在执行器<->存储引擎之间的交互。

mysql不是每次数据更改都立刻写到磁盘,而是会先将修改后的结果暂存在内存中,当一段时间后,再一次性将多个修改写到磁盘上,减少磁盘io成本,同时提高操作速度。

mysql通过WAL(write-ahead logging)技术保证事务:

在同一个事务中,每当数据库进行修改数据操作时,将修改结果更新到内存后,会在redo log添加一行记录记录“需要在哪个数据页上做什么修改”,并将该记录状态置为prepare,等到commit提交事务后,会将此次事务中在redo log添加的记录的状态都置为commit状态,之后将修改落盘时,会将redo log中状态为commit的记录的修改都写入磁盘。

过程如下图:

redo log记录方式:

redolog的大小是固定的,在mysql中可以通过修改配置参数innodb_log_files_in_group和innodb_log_file_size配置日志文件数量和每个日志文件大小,redolog采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。

如下redolog记录方式图:

write pos表示日志当前记录的位置,当ib_logfile_4写满后,会从ib_logfile_1从头开始记录;check point表示将日志记录的修改写进磁盘,完成数据落盘,数据落盘后checkpoint会将日志上的相关记录擦除掉,即write pos->checkpoint之间的部分是redo log空着的部分,用于记录新的记录,checkpoint->write pos之间是redo log待落盘的数据修改记录。当writepos追上checkpoint时,得先停下记录,先推动checkpoint向前移动,空出位置记录新的日志。
有了redo log,当数据库发生宕机重启后,可通过redo log将未落盘的数据恢复,即保证已经提交的事务记录不会丢失。有了redo log,为啥还需要binlog呢?

  • 1、redo log的大小是固定的,日志上的记录修改落盘后,日志会被覆盖掉,无法用于数据回滚/数据恢复等操作。
  • 2、redo log是innodb引擎层实现的,并不是所有引擎都有。

基于以上,binlog必不可少

  • 1、binlog是server层实现的,意味着所有引擎都可以使用binlog日志
  • 2、binlog通过追加的方式写入的,可通过配置参数max_binlog_size设置每个binlog文件的大小,当文件大小大于给定值后,日志会发生滚动,之后的日志记录到新的文件上。
  • 3、binlog有两种记录模式,statement格式的话是记sql语句, row格式会记录行的内容,记两条,更新前和更新后都有。

binlog和redo log必须保持一致,不允许出现binlog有记录但redolog没有的情况,反之亦然。之前说过在一个事务中,redolog有prepare和commit两种状态,所以,在redolog状态为prepare时记录binlog可保证两日志的记录一致,下图列出各种情况来说明。

现在我们再来看看整个完整的流程图:

相关参数设置建议:

  • 1、innodb_flush_log_at_trx_commit:设置为1,表示每次事务的redolog都直接持久化到磁盘(注意是这里指的是redolog日志本身落盘),保证mysql重启后数据不丢失。
  • 2、sync_binlog: 设置为1,表示每次事务的binlog都直接持久化到磁盘(注意是这里指的是binlog日志本身落盘),保证mysql重启后binlog记录是完整的。

到此这篇关于mysql日志系统redo log和bin log介绍的文章就介绍到这了,更多相关mysql日志系统 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql日志系统redolog和binlog介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql两个重要的日志redolog和binlog

一.redo log使用原因在 MySQL 里有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称 是 Write-Ah
mysql两个重要的日志redolog和binlog
2014-05-05

mysql学习笔记第二节 日志系统 redolog与binlog

第二节 日志系统一条update语句的更新过程首先让与这个表有关的所有缓存全都失效其余与查询流程基本相似,但是还涉及到两个重要的日志模块-redo log和binlogredo log(重做日志)介绍由于读写磁盘是一件非常费时间的事情,因此当记录需要更新的时候
mysql学习笔记第二节 日志系统 redolog与binlog
2018-06-07

MySQL中Binlog日志的使用方法详细介绍

MySQLBinlog(二进制日志)记录数据库操作,用于数据复制、数据恢复和审计。启用后,记录修改操作并写入Binlog。通过不同格式和管理命令,可查看和管理Binlog。在主从复制中,Binlog用于同步数据变更。Binlog也可用于数据恢复,通过应用日志将数据库恢复到特定时间点。此外,Binlog可作为审计记录,提供操作历史、用户和时间等信息。建议始终启用Binlog,定期备份,监视大小,进行跨服务器复制和审计。
MySQL中Binlog日志的使用方法详细介绍
2024-04-02

Linux系统中日志详细介绍

目录1、日志相关服务2、系统中常见的日志文件1、日志相关服务 在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。RedHat认为syslogd已经不能满足在工作中的需求,rsyslogd服务支持的功能更加
2022-06-04

Android 日志系统Logger源代码详细介绍

我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件。在前面
2022-06-06

MySQL日志系统bin log、redo log和undo log

MySQL日志系统bin log、redo log和undo log     今人不见古时月,今月曾经照古人。 简介:日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息,主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。在
MySQL日志系统bin log、redo log和undo log
2019-07-22

MySQL基础篇(07):用户和权限管理,日志体系简介

本文源码:GitHub·点这里 || GitEE·点这里一、MySQL用户1、基础描述在数据库的使用过程中,用户作为访问数据库的鉴权因素,起到非常重要的作用,安装MySQL时会自动生成一个root用户,作为数据库管理员,拥有所有权限。在多用户的应用场景下,可
MySQL基础篇(07):用户和权限管理,日志体系简介
2021-04-28

如何利用MySQL和Go语言开发一个简单的日志管理系统

如何利用MySQL和Go语言开发一个简单的日志管理系统引言:日志是软件开发中经常用到的重要组成部分,它可以帮助我们追踪问题、记录用户操作、监控系统性能等。在本文中,我将通过结合MySQL和Go语言,教你如何开发一个简单的日志管理系统,并提供
2023-10-22

如何实现MySQL底层优化:日志系统的高级配置和性能调优

如何实现MySQL底层优化:日志系统的高级配置和性能调优摘要:MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种规模的应用程序中。在大数据量和高并发的场景下,MySQL的性能优化显得尤为重要。本文将重点介绍MySQL底层的日志系统
如何实现MySQL底层优化:日志系统的高级配置和性能调优
2023-11-08

编程热搜

目录