我们来看下Redo log的执行流程,假设执行的 SQL 如下:
update T set a =1 where id =666
- MySQL 客户端将请求语句 update T set a =1 where id =666,发往 MySQL Server 层。
- MySQL Server 层接收到 SQL 请求后,对其进行分析、优化、执行等处理工作,将生成的 SQL 执行计划发到 InnoDB 存储引擎层执行。
- InnoDB 存储引擎层将a修改为1的这个操作记录到内存中。
- 记录到内存以后会修改 redo log 的记录,会在添加一行记录,其内容是需要在哪个数据页上做什么修改。
- 此后,将事务的状态设置为 prepare ,说明已经准备好提交事务了。
- 等到 MySQL Server 层处理完事务以后,会将事务的状态设置为 commit,也就是提交该事务。
- 在收到事务提交的请求以后,redo log 会把刚才写入内存中的操作记录写入到磁盘中,从而完成整个日志的记录过程。