MySQL日志系统之一条SQL更新语句是如何执行的?
来源:SegmentFault
2023-02-24 20:02:03
0浏览
收藏
你在学习数据库相关的知识吗?本文《MySQL日志系统之一条SQL更新语句是如何执行的?》,主要介绍的内容就涉及到MySQL,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!
前言
当我们执行一条
sql更新语句时,你有没有想过,它的在
MySQL系统内部是如何去执行的?当我们购买
MySQL服务器时,你有没有考虑过为什么
MySQL服务器内存大,硬盘为
SSD的话比较好?(当然,这是废话,什么服务器,内存大,硬盘为
SSD都好,但
MySQL服务器要求还是比业务代码服务器要求高些)
以下我们以表
T的
update sql为例进行分析(默认
InnoDB引擎):
create table T(ID int primary key, c int); update T set c=c+1 where ID=2;
执行逻辑
一个
update语句的执行逻辑为:
1、通过连接器连接
MySQL Server层;
2、连接器阶段初步分析为
update交给分析器处理;
3、分析器详细分析
update语句,进行词法、语法、语义检查,生成解析树以供优化器使用,并在交给优化器之前进行权限检查
(precheck);
4、优化器将解析树优化,生成最优执行计划,交给执行器执行;
5、执行器在执行
sql时会再次检查权限,并调用引擎层提供的数据接口,对数据进行更新处理。
更新语句和查询语句不同之处在于,当我们执行更新时,对数据的敏感性是比较强的,我们需要保证数据更新正确,且万一的万一,
MySQL崩溃了,我们也能恢复数据,所以更新操作涉及到记录日志,这里的日志就是我们熟知的
MySQL Server层的
binlog日志和
InnoDB引擎层的
redolog日志。
所以,
update时,在上面执行逻辑中的第5步执行器执行阶段的处理过程为:
1、执行器取
ID=2的数据;
2、引擎判断数据页是否在内存中,没有则从磁盘读取到内存中,从内存中返回行数据;(内存大的服务器的好处)
3、执行器将该数据值加1,之后写入新行,通知引擎
4、引擎将新数据更新到内存中
5、引擎此时开始记录
redolog,并将该记录置为prepare状态
6、执行器写
binlog
7、引擎提交事务,并更新此行数据的
redolog状态为
commit
8、当
MySQL空闲时,会将内存中的数据落盘。
流程图:【深色为执行器执行,浅色为引擎处理】

以上就是更新数据时,执行器和引擎做的一系列操作。
整个更新过程其实是
AWL技术,即
Write-Ahead Logging预写式日志。先写日志,再更新。
分析
我们可能会有疑问:为什么在
binlog存在的情况下,我们还要额外引入
redolog呢?
我们详解之前,先讨论下
binlog和
redolog是什么。
binlog是
MySQL Server层提供的日志记录功能,所有引擎都能用,它是记录
sql执行逻辑的,如给ID=2这一行的c字段+1,且
binlog日志是追加记录的,当文件写到一定大小会新增一个新文件继续记录,属于全量日志。
redolog则是
InnoDB独有的日志,其他引擎不可用,且
redolog记录的是在某个数据页上做了什么修改,属于物理日志,只有
InnoDB才能用,且是固定大小,循环记录的。
现在我们来分析为什么
binlog和
redolog并存的问题。
binlog和
redolog是通过事件ID去关联的。
简单来说,
binlog和
redolog并存可以保证数据一致性,以及意外宕机时的数据恢复问题。也就是
MySQL的
crash-safe。
- 如果我们只记录
binlog
,那么我们只有操作记录,如果日志记录了,但是数据没更新到表里,当我们使用binlog
恢复表时,会出现数据不一致。 - 单独记录
redolog
是不行的,因为redolog
是循环记录的,会抹去旧的日志,不像binlog
一样,是全量的。(资料显示,现在已经有在做redolog
全量存储的第三方团队了,基于数据页的数据恢复一致性更强,且不用记两份日志) - 如果先记录
binlog
再记录redolog
的话,若写完binlog
数据库崩了,此时没有记录redolog
,当重启数据库时,因为redolog
没记录,所以此事务操作无效,库中值不会改变,但是binlog
中又有此条记录,导致使用binlog
恢复数据时,会更新值,导致数据不一致。 - 如果先记录
redolog
再记录binlog
的话,若写完redolog
数据库崩了,此时没有记录binlog
,重启数据库,虽然能通过redolog
正确恢复到之前的数据更新,但是因为binlog
没记录,之后备份恢复时,还是会导致数据不一致。
最后
最后,举个简明的卖东西例子去概括下
redolog和
binlog的记录过程:
一个完整的交易过程应该是:
1、账本记录卖一瓶可乐(
redolog 处于 prepare)
2、收钱放入抽屉(
binlog)
3、收完钱,在账本该记录上打对勾,代表抵账(
redolog 置为 commit)
若收钱过程被打断,则整理交易时,发现只是记账了却没收钱,则删除该账本记录(回滚)
若收了钱,有事情耽误了抵账,那么之后闲下来对账的时候,将账本该记录打勾即可(即
commit)
今天带大家了解了MySQL的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
MySQL数据库主从同步实战过程
- 上一篇
- MySQL数据库主从同步实战过程
- 下一篇
- 【MySQL】字符集不同导致的问题
查看更多
最新文章
-
- 数据库 · MySQL | 2天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 6天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3182次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3393次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3425次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4529次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3802次使用
查看更多
相关文章
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览

