1. Mysql客户端将SQl语句传入MysqlServer层
2. 将name=666的数据查找到,实际上,存储引擎去磁盘当中找到这条数据,并加载Buffer Pool当中然后将name=666所在行的数据name字段改为涛哥
3. 修改以后不会将修改结果直接修改进磁盘,而是将修改进内存当中,会等待刷脏
4. 记录Redo Log,记录Redo Log之后,并将这行记录状态改为prepare(准备状态),并没有commit
5. 修改了好了之后,可以提交事务
6. 生成操作Bin Log,并将Bin Log写入磁盘后
7. 存储引擎提交事务
8. 将Redo Log改为commit,事务完成
为什么Redo Log需要2阶段提交
RedoLog写入,BinLog未写入:此时Mysql异常重启能根据Redo Log恢复name='涛哥'的数据。但Bin Log没有记录。后续使用Bin Log回复临时库,会出现数据丢失,导致状态不一致。
BinLog写入,RedoLog未写入:此时Mysql异常重启能根据Bin Log重放name='涛哥'的数据。但Redo Log没有记录。重启后没有name='涛哥'的数据,会出现数据丢失,导致状态不一致。