在深入学习MySQL数据库中,就会接触到日志这一个概念。日志是:用于记录所有事务以及每个事务对数据库所做的修改。在MySQL中,就会接触到最常用的两个日志:bin log、redo log。下面就让我来带大家了解学习这两种不同的日志系统。
bin log 和 redo log
一、一条更新语句的执行
前面我们介绍过了一条查询语句的具体执行过程,那么对于一条更新语句,也是大同小异。
首先进入到连接器后,我们知道每发生一次的更新操作,查询缓存都会全部清空。而后分析器进行词法语法分析,优化器找到相应的索引后通过引擎取到数据后执行器执行语句。今天的重点就是与执行器执行时紧密联系的两个日志系统。
二、redo log
想象一个日常场景——赊账。掌柜总是会有一个赊账本,记录每个人的赊账金额。如果生意火爆时有人来赊账,掌柜通常选择将一段时间的赊账记录单独列到另一张纸上,等到空闲下来时,在找到账本中对应人的记录进行修改。这里的MySQL也一样,如果每一次的更新语句都要立刻写进磁盘中,效率实在太低,于是就开辟一块空间来存放一段时间的操作记录。每次执行更新语句后,就在redo log中加入此次的操作记录,并更新内存,等空闲下来再一并写到磁盘中去,这就是redo log的思想。
redo log是固定大小的,可以循环写入,有点像循