mysql日志redo log 和binlog
在上一篇中我们说到了mysql的基础架构,通常一个查询操作只会涉及到基础架构中的那几部分; 首先连接数据库,分析器进行语义、语法分析,优化器生成执行计划和索引选择、执行器执行对应的语句、存储引擎查看内存中是否有对应的数据,有的话直接返回,没有的话从磁盘查找(不考虑查询缓存);但是对于更新操作的话还需要用到日志来辅助 日志的作用:1、数据恢复需要用到binlog 2、数据库重启后需要redo log来保证数据的可靠,会出现数据还没写入磁盘服务器异常重启的情况 一、redo log(重做log) 由于直接更新磁盘响应较慢,所以引入了redo log,除了解决这个问题外它还能保证crash-safe redo log 是InnoDB特有的,他可以保证crash-safe(即数据库发生异常重启,之前提交的数据都不会丢失),因为提交记录都被保存在redo log中,重启之后仍然会将redo log中的提交记录刷新到磁盘 redo log大小是固定的,更新操作时并不会先直接更新磁盘中的数据,而是先将更新操作记录在redo log中,然后再更新内存中的数据,当数据库空闲时再将redo log中的记录刷新到数据库,如果数据库一直不空闲当redo log日志满了后数据库会先暂停其他的操作,先将redo log中的记录刷新到磁盘,这时会出现查询缓慢的情况(sql抖动) 二、binlog