【编程底层原理】mysql的redo log undo log bin log日志的作用,以及何时生成,涉及到哪些参数变量

ops/2024/9/23 12:22:03/

MySQL中的redo log、undo log和bin log是三种重要的日志,它们在数据库事务处理、数据持久性和复制等场景中发挥着关键作用。

1. Redo Log(重做日志)

    • 作用:Redo log用来保证事务的持久性。当数据库发生故障时,可以使用redo log来恢复数据到最后一次提交的状态。它记录了数据页的物理修改,即事务对数据页所做的更改。
    • 何时生成:在事务执行过程中,每当有数据页被修改时,对应的redo log就会被生成,并存储在内存中的redo log buffer里。
    • 参数变量: - innodb_log_buffer_size:控制redo log buffer的大小。 - innodb_flush_log_at_trx_commit:控制事务提交时redo log的刷盘行为,可以设置为0、1或2。 - innodb_log_file_size:定义单个redo log文件的大小

2. Undo Log(回滚日志)

    • 作用:Undo log用于事务的原子性和MVCC(多版本并发控制)。如果事务需要回滚或数据库崩溃,undo log可以用于恢复原始数据。同时,它支持在读取操作中提供数据的旧版本,使得在高并发环境下,不同的事务可以看到数据的不同版本。
    • 何时生成:在事务开始时创建,事务的每个修改操作都会生成undo log。
    • 参数变量: - 没有特定的参数直接控制undo log的大小,但它受innodb_buffer_pool_size的影响,因为undo log存储在buffer pool中。

3. Binlog(二进制日志)

    • 作用:Binlog是MySQL服务器层的日志,用于记录所有数据库表结构变更和数据修改的日志(不包括SELECT和SHOW这类操作)。它主要用于数据的复制和恢复。
    • 何时生成:在事务提交时生成,记录了该事务期间所有修改数据的操作。
    • 参数变量: - expire_logs_days:设置binlog文件的过期天数。 - max_binlog_size:定义单个binlog文件的最大大小。 - sync_binlog:控制每次事务写入binlog后是否进行fsync同步到磁盘。

4.总结

这些日志共同工作,确保了MySQL数据库的稳定性和数据的一致性。Redo log和undo log是InnoDB存储引擎特有的日志,而binlog则是MySQL服务器层的日志,它们之间的区别主要在于作用、生成时机和适用对象。

5.完整的流程

1. 开始事务

  • 描述:这是数据库事务的起点,标志着一系列操作的开始,这些操作将作为一个整体被执行。

2. 生成Undo Log

  • 描述:在事务开始时创建,用于记录事务对数据的每个修改操作的反向操作。如果事务需要回滚或数据库需要恢复到某个一致的状态,Undo Log将被用来撤销已经进行的修改。

3. 事务修改数据

  • 描述:在事务中,数据被修改。这可能包括插入、更新或删除操作。

4. 生成Redo Log

  • 描述:每当事务修改数据时,相应的Redo Log会被生成。Redo Log记录了数据页的物理修改,确保在发生故障时可以从日志中重放操作,恢复到最后一次提交的状态。

5. 事务提交

  • 描述:当事务中的所有操作成功完成,并且用户或应用程序发出提交指令时,事务将被标记为提交。这通常意味着所有更改都将被永久保存到数据库中。

6. 刷写Redo Log到磁盘

  • 描述:在事务提交时,为了保证持久性,Redo Log从内存中的Redo Log Buffer刷写到磁盘上的日志文件中。这个过程确保了即使在数据库服务器崩溃的情况下,修改也能被恢复。

7. 生成Bin Log

  • 描述:在事务提交时生成,Bin Log记录了该事务期间所有修改数据的操作。它是MySQL复制和数据恢复的关键组成部分,因为它提供了一种机制来复制和恢复在主服务器上执行的操作。

8. 事务完成

  • 描述:一旦Redo Log被刷写到磁盘,并且Bin Log被生成,事务就被认为是完整且持久化的。此时,事务的所有操作都已经被安全地保存,并且可以被系统其他部分访问。

Redo Log 参数变量

  • innodb_log_buffer_size:控制Redo Log Buffer的大小,这个缓冲区用于在将日志写入磁盘之前存储Redo Log。
  • innodb_flush_log_at_trx_commit:控制事务提交时Redo Log的刷盘行为。可以设置为0(不刷盘)、1(每次事务提交都刷盘)或2(每秒刷盘一次)。
  • innodb_log_file_size:定义单个Redo Log文件的大小,影响Redo Log文件的总量和刷盘操作的频率。

Undo Log 参数变量

  • innodb_buffer_pool_size:虽然Undo Log的大小没有直接的参数控制,但它存储在Buffer Pool中,因此这个参数影响Undo Log的存储和性能。

Bin Log 参数变量

  • expire_logs_days:设置Binlog文件的过期天数,之后这些文件将被自动删除。
  • max_binlog_size:定义单个Binlog文件的最大大小,达到这个大小时,Binlog将被旋转。
  • sync_binlog:控制每次事务写入Binlog后是否进行fsync同步到磁盘,以确保数据的持久性。

这些步骤和参数共同确保了MySQL数据库的稳定性和数据的一致性,无论是在正常操作还是在系统故障后。


http://www.ppmy.cn/ops/114773.html

相关文章

高效财税自动化软件如何提升企业财务工作的效率与准确性

在当今企业运营中,财务管理发挥着核心作用。它不仅涉及企业正常运转和市场决策,还是推动企业向高质量发展迈进的关键动力。面对激烈的市场竞争与科技革新的双重挑战,财务管理亟需进行持续的转型与提升,为企业高质量发展目标的实现…

面试金典题2.1

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2]输出:[1, 2]提示: 链表长度在[0, 20000]范围内。链表元素在[0…

Leetcode 1041. 困于环中的机器人

1.题目基本信息 1.1.题目描述 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: “G”&…

js进阶——作用域闭包

1. 作用域与闭包的基础概念 1.1 作用域 (Scope) 在 JavaScript 中,作用域定义了变量、函数的可访问性。根据变量声明的位置不同,作用域有三种主要类型: 全局作用域:在代码的任何地方都可以访问。函数作用域:只在声明…

算法题之每日温度

每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…

单点登录前端

​​​​​​ cookiessession 服务端创建一个登录认证中心, 验证成功后,在session里面创建一个映射,key为cookies,value为用户信息,将cookies返回给客户端,客户端其他系统查询时携带该cookies,…

(182)时序收敛--->(32)时序收敛三二

1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时序收敛三二 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域…

Linux 进程2

环境变量 再Linux操作系统中一切皆文件,这个环境变量自然也是一个文件,它的作用是辅助我们使用操作系统还可以辨识我们是什么用户(一般用户,root用户)。 env是读取完整环境变量的指令,里面记录了许多我登录操作系统所用的用户的信…