mysql的基本逻辑结构.png
mysql主要分为客户端、Server层、存储引擎层
Server层中存在连接器,缓存区,词法分析器,优化器以及执行器。其操作顺序是连接校验权限后如果开启了缓存区访问的话,会先访问缓存区中是否存在该语句注:缓存区的存储结构是key-value,key对应的sql。如果缓存区中没有会先经过词法分析器分析成功之后进入优化器,执行器
redo log 和bin log的区别
bin log是一个逻辑日志,里面存储的是更新语句的处理逻辑;redo log是一个物理日志,里面存储的是更新语句的执行结果。比如说张三原本有100元,现在李四给其转了200元,那么redo log中记录的就是张三的300元。而Bin log对应的是逻辑日志它记录的就是100+200逻辑运算的一个过程。Bin log是不限大小,追加写入。而redo log是有一个限定的大小。其中bin log是可以用来将误删除的数据从日志中将其归档找回来。
redo log理解
redo log是Innodb引擎中特有的,执行数据的写入采用的是WAL机制(Write-Ahead Logging)先写日志再写磁盘。如果没有采用wal机制的化每次都往磁盘文件中写入数据是非常麻烦的,因为我们的数据在磁盘中是结构化存储的,当插入数据的数据的时候先要查询数据的存储位置再写入而使用了wal机制将其先写入redo 日志中该机制里面还有一个检查机制,待数据库不忙的时候再将日志中的数据同步到磁盘文件中。其中redo log在mysql的data文件中对应的是ib_logfile1和ib_logfile0
redolog写入的原理
redo log在mysql的data文件夹中存在两个文件,写入的时候按照循环写入的规则,先往文件1中写入,文件1写满时,切换到文件2中,如果两个文件都写满此时checkpoint(当前边写边后移)会回到文件1中通知innodb引擎擦除已经提交的日志。如果都没有提交,此时的mysql会停下来,先把文件1中的一部分数据同步到数据表中才会接收新的更新任务