1,执行器通过引擎查找到需要更新的数据
2,数据已经在内存直接返回,否则从磁盘中读入到内存中
3,执行器中 将数据更新
4,引擎将新数据 写入内存中,同时写入redo log中 事务处于prepare状态 。
5,引擎告知执行器,执行完成。执行器将这个操作的bin log 写入磁盘
6,执行器调用提交事务接口,提交事务。
过程中涉及到的redo log 和bin log
redo log 记录最新数据缓存。mysql更新一条数据并不是直接更新到磁盘中,首先记录到redo log,内存中。
然后在空闲时,将redo log中的数据写入磁盘。这样如果系统崩了,内存中的数据,未提交的可以通过redo log 恢复
redo log中的日志是有大小限制的。类似于环形,write pos是写入的位置,chekpoint是磁盘刷新的位置。
当磁盘内容满了,即write pos 与chek point遇见时。刷新部分数据到磁盘,同时删除相应的redo log,腾出空间。
bin log记录的是每次DDL和DML的操作动作。
在数据误操作时,可以通过最新备份数据+bin log 恢复成想要的状态
原文:https://www.cnblogs.com/luoying/p/12083792.html