Mysql Innodb引擎执行过程
Mysql Innodb引擎执行过程
- Mysql内部组件
- Innodb引擎
- update语句执行过程
- binlog
Mysql内部组件
- 客户端
- Server层:连接器、词法分析器、优化器、执行器
- 引擎层:Innodb、MYISAM、memory
Innodb引擎
- Buffer Pool:数据操作先从Buffer Pool中找数据,没有的话从磁盘中加载进来;修改数据也是先修改Buffer Pool,后面再刷到磁盘
- Redo log Buffer:redo log先写buffer,再顺序写到磁盘的日志文件中
- Undo log:undo log顺序写入磁盘中日志文件中,mvcc机制用到
- Redo log:磁盘中保证持久性的文件,如果Buffer Pool中的数据刷入磁盘失败,就要用到此文件
update语句执行过程
- 先去Buffer Pool找,如果当前处理不存在,则从磁盘ibd文件中load当前页的数据到Buffer Pool
- 写入Undo log日志文件
- 更新update的修改到Buffer Pool中
- 写redo log到Redo log Buffer
- redo log 顺序写入磁盘redo日志文件中
- 写binlog(属于server层)
- 提交事务commit标记写入redo log日志文件中
- 系统空闲时把Buffer Pool中的数据刷入磁盘中,以页为单位
binlog
binlog 5.7版本默认关闭,8.0版本默认打开。可以用来恢复数据或主从复制。
#查看binlog相关参数
showvariables like '%log_bin%';
开启binlog需要在配置中增加如下配置:
#log‐bin设置binlog的存放位置,可以是绝对路径,也可以是相对路径,这里写的相对路径,则binlog文件默认会放在data数据目录下
log‐bin=mysql‐binlog
#ServerId是数据库服务器id,随便写一个数都可以,这个id用来在mysql集群环境中标记唯一mysql服务器,集群环境中每台mysql服务器的id不能一样,不加启动会报错
server‐id=1
#其他配置
binlog_format=row#日志文件格式,下面会详细解释
expire_logs_days=15 #执行自动删除binlog日志文件的天数,默认为0,表示不自动删除
max_binlog_size=200M #单个binlog日志文件的大小限制,默认为1GB