ps:查询语句的那一套流程,更新语句也是同样会走一遍
每一次更新只更新内存,并写入redo log,如果每次更新都需要更新磁盘,涉及到随机IO,性能过差,采用预写日志技术(WAL:Write-Ahead Logging),redo log写满了,会停下来写redo log,将redo log的数据刷到磁盘。
redo log图解
有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe
redo log 是 InnoDB 引擎特有的日志,而 Server 层也有自己的日志,称为 binlog(归档日志)
两种日志的不同
update语句执行流程
图中浅色框表示是在 InnoDB 内部执行的深色框表示是在执行器中执行的
inlog 会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。目前我司是开启aliyun配置每天自动备份
文章笔记来自极客时间《MySQL实战45讲》