mysql一条sql更新过程。
2021/11/24 19:40:09
本文主要是介绍mysql一条sql更新过程。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ps:查询语句的那一套流程,更新语句也是同样会走一遍
mysql更新涉及到日志模块
- redo log(重做日志)
- binlog(归档日志)
redo log
每一次更新只更新内存,并写入redo log,如果每次更新都需要更新磁盘,涉及到随机IO,性能过差,采用预写日志技术(WAL:Write-Ahead Logging),redo log写满了,会停下来写redo log,将redo log的数据刷到磁盘。
redo log图解
- write pos 是当前记录的位置
- checkpoint 是当前要擦除的位置
有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe
binlog
redo log 是 InnoDB 引擎特有的日志,而 Server 层也有自己的日志,称为 binlog(归档日志)
两种日志的不同
- redo log 是InnoDB特有的;binlog是mysql Server层的,所有存储引擎都有
- redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”
- redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志
update语句执行流程
图中浅色框表示是在 InnoDB 内部执行的深色框表示是在执行器中执行的
两阶段提交
inlog 会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。目前我司是开启aliyun配置每天自动备份
文章笔记来自极客时间《MySQL实战45讲》
这篇关于mysql一条sql更新过程。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程