01、undo日志和redo日志的作用

本文详细介绍了MySQL更新语句的执行流程,包括查询缓冲池、undo日志和redo日志的作用。在执行更新时,首先检查缓冲池,然后利用undo日志进行事务回滚保障,redo日志确保数据持久化。讨论了innodb_flush_log_at_trx_commit参数对日志刷盘策略的影响,建议设置为1以避免数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、更新语句MySQL大致执行流程

在这里插入图片描述

2、InnoDB 的主要内存结构:缓冲池

执行引擎要执行更新语句的时候,比如id =10 这行数据,会先去查询 id =10 这行数据是否在缓存池里,如果不在 那么会直接从硬盘加载到缓存池中,而且还会对这行数据加独占锁

3、undo 日志的作用

3.1、 如 id =10 这行的name “zhangsan” ,现在更新为 xxx ,那么此时需要把更新前的值"zhangsan" 和id = 10 这些信息写到undo 日志文件中以便事务的回滚。
3.2、写入undo日志后 会更新缓存池中的数据,这是如果mysql 宕机,会导致没存中的数据丢失!

4、redo日志的作用

4.1、redo log 记录对数据库的操作,在写入缓存后在写入redo log 如果在写入redo log mysql 宕机,会导致 内存中数据,和redo log 数据丢失(在未提交先都是会丢失)
4.2、提交事务后 会根据 innodb_flush_log_at_trx_commit配置的策略,将redo log中的日志刷新到磁盘中去。
innodb_flush_log_at_trx_commit 分别可以设置 0 、1 、2
设置0表示:提交事务 不会把redo log 的数据刷新到磁盘中,如果这时候mysql 宕机,会导致 内存中数据和 redo log 日志丢失。
设置1表示: 表示 只要事务提交成功了 磁盘中必须有redo log 的数据
设置2表示:提交事务 会把redo 日志 os cache 而不是直接写入磁盘,可能是1秒后才会把 os cache的数据写入到磁盘中。(存在 事务提交成功,宕机后数据丢失)
综上所述 建议日志刷盘策略设置为1,事务提交后 数据就不会丢失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值