本讲问题:一条SQL更新语句是如何执行的
1.首先你需要连接到这个服务器,这时候与你交互的是连接器。连接器负责与客户端建立连接、获取权限、维持和管理连接。
2.查询缓存(MySQL8.0删掉了这个功能)
3.如果没有命中缓存,那么就要开始真正执行语句。分析器需要对你的SQL语句做解析,判断你输入的SQL语句是否满足SQL语法。
4.经过了分析器,MySQL还需要对你的SQL语句进行优化,这时候涉及到的就是优化器,选择成本最小的执行计划。
5.最后就是执行器,分析器告诉你要做什么,优化器告诉你应该怎么做,而执行器才是真正执行语句的。判断你对该表是否有查询权限,再选择使用哪个引擎。
----相比于查询语句多了以下部分
6.返回行数据,对行数据进行修改
7.写入redolog,处于perpare阶段
8.写binlog,最后commit。
前面我说到定期全量备份的周期“取决于系统重要性,有的是一天一备,有的是一周一备”。那么在什么场景下,一天一备会比一周一备更有优势呢?或者说,它影响了这个数据库系统的哪个指标?
首先,是恢复数据丢失的时间,既然需要恢复,肯定是数据丢失了。如果一天一备份的话,只要找
到这天的全备,加入这天某段时间的binlog来恢复,如果一周一备份,假设是周一,而你要恢复
的数据是周日某个时间点,那就,需要全备+周一到周日某个时间点的全部binlog用来恢复,时间
相比前者需要增加很多;
看业务能忍受的程度,其次,是数据库丢失,如果一周一备份的话,需要确保整个一周的binlog
都完好无损,否则将无法恢复;而一天一备,只要保证这天的binlog都完好无损;当然这个可以
通过校验,或者冗余等技术来实现,
update执行流程图