简单介绍了这3种日志之后,来看一下一条更新语句执行过程中这些日志是如何记录的。
update department set dept='产品' where id=2;
主要流程如下:
- 分析器对SQL 语句进行解析,通过词法和语法解析知道这条语句要做什么。
- 执行器通过InnoDB引擎提供的接口读取id=2这一行数据,如果数据在内存中就直接返回行数据,如果不在就从磁盘中读取。
- 执行器将这行数据的
dept
设置为产品
。 - InnoDB将旧行数据写入undo log中。
- InnoDB将新行更新到内存。
- InnoDB写redo log并标记为prepare状态。
- 执行器写binlog,并把 binlog 写入磁盘。
- 执行器调用InnoDB的提交事务接口,InnoDB写redo log并标记为commit状态,更新完成。
本文介绍了MySQL的三种重要日志:物理日志 redo log和undo log 和逻辑日志 binlog,它还有其它日志,比如Error log、General query log、Relay log、Slow query log、DDL log等,他们都是MySQL数据库的重要组成部分,日志记录在一定程度上影响MySQL服务的性能,但他们是必不可少的,备份的频率需要根据具体业务来进行配置。
links:
https://devtest-notes.readthedocs.io/zh/latest/database/database-for-mysql-log-system.html#update