必须了解的mysql三大日志-binlog、redo log和undo log

这篇具有很好参考价值的文章主要介绍了必须了解的mysql三大日志-binlog、redo log和undo log。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,前言

MySQL实现事务、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL
本文主要讲述MySQL的三大日志系统,Redo Log(重做日志)、Undo Log(恢复日志)、Bin Log(备份日志)

二,binlog-备份日志

1,作用

Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自带的。
作用: 数据备份和主从同步。

2,使用场景

在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复。

  • 主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。
  • 数据恢复:通过使用mysqlbinlog工具来恢复数据。

3,日志形式

Bin Log共有三种日志格式,可以binlog_format配置参数指定
必须了解的mysql三大日志-binlog、redo log和undo log

4,binlog刷盘时机

对于InnoDB存储引擎而言,只有在事务提交时才会记录biglog,此时记录还在内存中,那么biglog是什么时候刷到磁盘中的呢?mysql通过sync_binlog参数控制biglog的刷盘时机,取值范围是0-N:

  • 0:不去强制要求,由系统自行判断何时写入磁盘;
  • 1:每次commit的时候都要将binlog写入磁盘;
  • N:每N个事务,才会将binlog写入磁盘。

从上面可以看出,sync_binlog最安全的是设置是1,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

三,redo log-重做日志

1,概念

redo log包括两部分:一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redo log file。这种先写日志,再写磁盘的技术就是MySQL里经常说到的WAL(Write-Ahead Logging) 技术

2,为什么需要redo log

  • 事务的四大特性里面有一个是持久性,具体就是只要事务提交成功,数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么mysql是如何保证持久性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中
  • 但是这么做会有严重的性能问题,主要体现在两个方面:
    (1)因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了
    (2)一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机IO写入性能太差
  • 因此mysql设计了redo log,具体来说就是只记录事务对数据页做了哪些修改

3,日志形式

redo log实际上记录数据页的变更,而这种变更记录是没必要全部保存,因此redo log实现上采用了大小固定,循环写入的方式,当写到结尾时,会回到开头循环写日志

4,redo log与binlog区别

必须了解的mysql三大日志-binlog、redo log和undo log

四,undo log-回滚日志

1,undo log的内容和作用

undo log记录的是逻辑日志,也就是sql语句
比如:当我们执行一条insert语句时,Undo Log就记录一条相反的delete语句。
作用:

  • 回滚事务时,恢复到修改前的数据。

  • 实现 MVCC(多版本并发控制,Multi-Version Concurrency Control) 。

  • MySQL事务中原子性就是使用Undo Log实现的。

2,mysql的日志

MySQL的日志(log)主要包括以下几种类型:文章来源地址https://www.toymoban.com/news/detail-452382.html

  • 错误日志(Error Log):记录MySQL服务器出现错误的信息,如非法用户连接、语法错误等。
  • 二进制日志(Binary Log):记录MySQL服务器执行的所有修改数据的操作语句,如INSERT、DELETE、UPDATE。
  • 慢查询日志(Slow Query Log):记录查询运行时间超过指定阈值(slow_query_log_threshold)的SQL语句。
  • 查询日志(Query Log):记录所有客户端与MySQL服务器交互的命令,包括查询和修改等操作。
  • 事务日志(Transaction Log):记录所有接收到的SQL语句,可以用于回滚和恢复。
  • 中继日志(Relay Log):主要用于MySQL的主从复制机制,用于将主服务器的二进制日志复制到从服务器上。
    以上就是MySQL的常用日志类型。

到了这里,关于必须了解的mysql三大日志-binlog、redo log和undo log的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql日志redo log、bin log、undo log 区别与作用及二阶段提交

    重做日志 作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 内容:物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中

    2024年02月03日
    浏览(51)
  • [MySQL]事务原理之redo log,undo log

    🌈键盘敲烂,年薪30万🌈 目录 一、log日志文件 📕 事务执行流程 📕 redo log 📕 undo log 二、总结 👀再来一遍ACID 1. 原子性: 原子性确保事务作为一个整体执行,要么全部执行成功,要么全部不执行。 2. 一致性: 一致性确保事务将数据库从一个状态转换为另一个状态。 3.

    2024年02月04日
    浏览(33)
  • 02_重要的两个日志 redo log 和 binlog

    MySQL 45 讲Note: 课程专栏名称:《MySQL实战45讲》课程 笔记参考:MYSQL45 讲 想要理解这两个日志 redo log 和 binlog ;我们需要对MySQL 的备份恢复机制有一个基本的了解。 之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,带着好奇的态度,这是怎样做到的呢

    2024年02月07日
    浏览(43)
  • 【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用

    当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。 在下次查询需要访问这个数据页的时候,将数据页

    2024年02月16日
    浏览(42)
  • 一文读懂MySQL7大日志(slow、redo、undo、bin、relay、general、error)

    用于记录执行时间超过指定值的 SQL 语句的详细信息,多用于调试和监控。 因为开启会略微影响性能,所以默认没有开启,所以需要配置。 重做日志,记录了数据库中发生的每次修改,如增、删、改、对数据页的更改。这些修改被记录在 redo 日志中,以便在数据库崩溃或意外

    2024年03月09日
    浏览(61)
  • mysql三大日志—— 二进制日志binlog

    binlog用于记录数据库执行的写入性操作,是一种 逻辑日志 ,binlog 处于服务层 ,通过 追加写入 的方式以二进制的形式保存在磁盘中。 binlog主要用于 主从复制 和数据恢复。 主从复制:在主机端开启binlog日志管理,主机将binlog日志发送到各个从机,从机来读取binlog文件来做到

    2024年02月13日
    浏览(46)
  • MySQL三大日志——binlog、redoLog、undoLog详解

    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息,能帮助我们进行很多容错及分析工作,其中有三大日志与我们这些开发者息息相关,本文将介绍binlog、redoLog、undoLog三种日志: 我们都知道,事务的四大特性里面有一个是持久性,具体来说就是只要事

    2024年02月02日
    浏览(39)
  • 一文带你了解MySQL之undo日志

    我们在前边学习事务的时候说过事务需要保证 原子性 ,也就是 事务中的操作要么全做,要么全不做 。但是有的时候事务会出现一些情况,比如: 情况一: 事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误 情况二:程序

    2024年02月07日
    浏览(78)
  • 一文带你了解MySQL之redo日志

    前言 本文以及接下来的几篇文章将会频繁的使用到我们前边唠叨的 InnoDB记录行格式 、 页面格式 、 索引原理 、 表空间的组成 等各种基础知识,如果大家对这些东西理解的不透彻,那么阅读下边的文字可能会特别的些费力,为保证您能正常的理解,请确保自己已经掌握了我

    2024年02月08日
    浏览(44)
  • 【数据库管理】④重做日志Redo Log

    重做日志(Redo log)是数据库管理系统中的一种机制,主要作用包括: 提供事务的持久性支持:重做日志记录了每个事务对数据库所做的修改操作,以便在系统故障或崩溃时,通过重新执行重做日志中未提交的事务来恢复数据。 支持数据库备份和恢复:重做日志可以用于还原

    2023年04月08日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包