
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阶段提交
Redo Log写入,Bin Log未写入:此时Mysql异常重启能根据Redo Log恢复name='涛哥’的数据。但Bin Log没有记录。后续使用Bin Log回复临时库,会出现数据丢失,导致状态不一致。
Bin Log写入,Redo Log未写入:此时Mysql异常重启能根据Bin Log重放name='涛哥’的数据。但Redo Log没有记录。重启后没有name='涛哥’的数据,会出现数据丢失,导致状态不一致。
本文详细介绍了MySQL中事务的处理流程,包括RedoLog和BinLog的使用。在修改数据时,先写入RedoLog并标记为prepare状态,随后写入BinLog到磁盘,最后提交事务。RedoLog的2阶段提交确保了数据一致性,避免了异常情况下的数据丢失。
179

被折叠的 条评论
为什么被折叠?



