Mysql-一条更新语句要经历那些流程

1

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='涛哥’的数据,会出现数据丢失,导致状态不一致。

猜你喜欢

转载自blog.csdn.net/ahuangqingfeng/article/details/124500917