Innodb核心原理之事务持久性及redolog两阶段提交

事务概述

事务四大特性:
A原子性、C一致性、I隔离性、D持久性

原子性:事务作为一个整体被执行,包含在事务中的操作要么全部提交,要么全部回滚。
innodb引擎两种事务日志:

  • redo log:保证事务持久性
  • undo log:保证事务原子性和隔离性

innodb回滚靠的是undo log

一致性:事务应该确保数据库的状态从一个一致性状态转变为另一个一致性状态
1.约束的一致性:创建表结构的时候,实体、引用、自定义完整性;
2.数据一致性:是一个综合的规定、它是由原子性、持久性、隔离性共同保证的。

隔离性:一个事务执行不能被其他事务干扰。一个事务内的操作及使用的数据对其他并发事务的隔离。
不考虑隔离性会引发一些问题:
脏读:读到未提交的数据
不可重复读:事务内多次读取同一行记录结果不一致
幻读:事务内多次按相同条件查询,结果不一致,可能多几行或少几行

持久性:一个事务一旦提交,则对数据库中数据的改变应该是永久的,后续的操作不应该对其有任何影响、不会丢失。
持久性依赖于两个日志文件:
redo log和binlog。

redolog两阶段提交

redo log提交分为两步(两阶段提交),如下图所示

两阶段提交的具体过程包括:prepare阶段写redolog,binlog落盘,coomit阶段更新redolog(打标记)。

为什么要有两阶段提交?
主要是为了解决binlog和redolog一致性的问题。
使用两阶段提交的方式,无论数据库在哪个环节发生崩溃,都可以正确地恢复,因为redolog和binlog都会有一个唯一的XID来标记更新的事务,从而二者可以对齐。在崩溃恢复时,会顺序扫描redo log:
1)如果碰到既有prepare又有commit的redolog则直接提交(即阶段2),
2)如果redolog处于prepare状态,就会拿着xid去binlog中找对应的事务,判断事务所对应的binlog是否完整(即上图第4步binlog落盘是否完整),如果完整则事务提交,如果不完整则事务回滚。

网络上其他对崩溃恢复的描述:

  • 情况一,在prepare阶段完成之后崩溃,由于binlog没有记录,因此直接回滚。
  • 情况二,在binlog落盘后崩溃(上图第4步),检查事务是否完整无误,若是,直接提交即可,否则直接回滚。
  • 情况三,在commit阶段完成后崩溃,同情况二。

整体看一个数据修改的事务流程:


ACID总结

1.事务的持久化是为了应对系统崩溃造成的数据丢失的情况
2.只有保证事务的一致性,才能保证执行结果的正确性
3.在非并发状态下,事务和事务之间天然保证隔离性,只需要保证事务的原子性,就可以保证事务的一致性
4.在并发状态下,要严格保证事务的原子性和隔离性

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容