mysql innodb 日志与事物

redolog 前滚日志

当发生数据修改时,会先讲记录写到redo log中,并更新内层,此时更新就算是完成了,同时会在合适的时间将记录写入磁盘中;
Redlog大小是固定的,是循环写的过程,空间会用完;
这个机制保证了即使数据库发生异常重启,之前的记录也不会丢失,叫做crash-safe。

读入缓冲区大小,对表进行顺序扫描的请求将分配到一个读入缓冲区
read_buffer_size

undolog 回滚日志

在操作任何数据之前,首先将数据备份到一个地方(undo log)。然后进行数据的修改,如果出现了错误或者用户执行了rollback语句,系统可以利用undo log中的额备份将数据恢复到事务开始之前的状态。

当delte一条记录时,undo log 中会记一条对应的insert记录;
当insert一条记录时,undo log中会记录一条对应的delete记录;
当update一条记录时,它记录一条对应相反的update记录。
查询。。。查询怎么可能会有?

binlog是mysql service,不是innodb独有的。

binlog是追加写,顺序写,速度快。
恢复数据,主从复制。

查看是否开启
show variables like ‘%log-bin%’;

流程

1,执行器先从引擎中找到数据,如果在内存中直接返回,如果不在内存中,查询后返回;
2,执行器拿到数据之后会先修改数据,然后调动引擎接口重新写入数据;
3,引擎将数据更新到内存,同时写数据到redo中,此时处于prepare阶段,并通过执行器执行完成,随时可以操作;
4,执行器生成这个操作的binglog;
5,执行器调用引擎的事物提交接口,引擎把刚刚写完的redo改成commit状态,更新完成。

mysql的事物ACID

A原子性 通过 undo log 实现
C一致性 通过AID实现
I 隔离性 通过机制实现
D持久性 通过redo log实现

猜你喜欢

转载自blog.csdn.net/qq_39308071/article/details/114638795
今日推荐