mysql redo原子写_InnoDB如何保证redolog的完整性?

redo log里记录的只是对数据库页面的更改,它记录着类似『更改页面x 的指定偏移量的数据为k』这样的信息,是完全二进制的log(数据库原理概念上的,不是指MySQL binlog,MySQL binlog不是二进制log);在redo log里并没有存储在某个事务的某个操这样的信息。事务的CRUD操作中的写操作会被数据库翻译成一个个的对指定页面的写,对页面的写会进一步生成一或多个redo log。数据库在页面持久化前,会确保先把redo log写入磁盘持久化。而数据库页面上记录的原值会被覆盖,数据库会使用undo log记录这个更新前的值。

每一个事务写操作(包括插入,更新,删除),数据库要做的就是:

1.计算更新后的记录与更新前的记录的差值,把这个信息写到rollback segment里,形成undo log。由于『写rollback segment』这个动作本身也是对页面的修改,要记录这个操作的redo log。

2.在写完undo log后,数据库才把真正的对记录的更新写到直正的数据页面,这个操作也会生成对应的redo log。

在事务提交时,事务会:

1.更新它在redo log中的记录的事务状态,同样地,也会有对应的redo log生成。

2.持久化redo log缓冲区中的数据,数据库会确保当前事务所生成的所redo log都在提交状态返回给用户前被持久化,这些redo log包括undo的redo log,也包括对原如数据更新产生的log。

在数据库宕机重启后,数据库会通过下面的操作恢复,

1.启动开始时检测是否发生崩溃,然后定位到最近的一个checkpoint(一个一致的时间点),定位在这个checkpoint时flush到磁盘的数据页,检查checksum。如果不正确,说明这个页在上次写入是不完整的,从doublewrite buffer里把正确的页读出来,并更新到buffer中的页上。

2.顺序地分析redo log,这里包括原始数据的redo log和undo log的redo log。把redo apply页面上,这样数据库就会恢复到一个同宕机前一时刻同样的(页面)状态。

3.数据库还要通过undo log标识出未提交事务,rollback未提交的事务。要把那些被未完成的事务更新的值,替换回原来的值。

innodb的事务原子性是通过两个层次上保证的,首先,redo log会保证数据库的物理上(数据库页面)同崩溃前一刻的数据库是相同的状态;其次,undo log会保证事务的原子性,即『要么都做,要么都不做』的语义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS 9.2 Server Pack 5 蓄势待发

ArcGIS 9.2补丁真是不少,快把开发人员给淹没了,之前版本的ArcGIS从来没有发布过sp4,现在已经通知马上要发布sp5,修正了大量desktop、engine、server上的bug,估计这应该是9.2最后一组补丁了,记得上次Jack来北…

jenkins maven没有使用全局设置文件地址_Jenkins手把手图文教程「基于Jenkins 2.164.1」...

一、下载前往https://jenkins.io/download/ ,按需下载。如用于生产,建议下载Long-term Support (LTS) 版本,这样能够获得相对长期的维护;如想体验最新的功能,可尝试 Weekly 版本。可以直接下载特定系统专属的版本&…

游戏数值策划-经验值计算公式设计(自百度文库)

较复杂的概念源自于设计师对游戏整体的把握,例如我们在设计游戏中主角的成长经验值时,并不能随意给出个公式就了事,那是毫不负责任的。 经验计算的基础模型 我们通常说的成长所需经验公式大多是: 每级升级所需经验Lv^3*修正值修正…

[原创]flex 3 + .net开发flash Remoting一 --- 开发环境

flex 3 .net开发flash Remoting一 --- 开发环境 本篇文章将介绍flash Remoting 开发的必备的运行环境和相关配置过程:一。开发必备环境。 1. flex 3,请从Adobe官方网站下载或其它地方找D版(目前为止D版还没有出)。 2. Visual Studio 2005&#…

【转】winform回车变为tab

源地址:http://www.cnblogs.com/wohexiaocai/p/4302200.html转载于:https://www.cnblogs.com/haizine/p/10484454.html

接视频Java 数据库

http://pan.baidu.com/s/1mg1EYAO windows各种版本map.centerAndZoom(point,15);这句话可以指向地图的不同位置百度云http://developer.baidu.com/map/jsdemo.htm#i1_1?qq-pf-topcqq.c2c1 百度云粉丝 http://yun.baidu.com/share/home?uk1814500964&viewshare#categor…

Lachesis Shield 设计上的抉择

最近有很多朋友和同学跟我谈起 Lachesis Shield 设计上的一些问题。我想我需要总结一下我的设计策略,虽然这是个看起来简单得不能再简单的工具。我面临的选择:1 界面位置显然,有很多位置可以摆放这么个不起眼的东西,比如说&#x…

mysql表恢复报错binlog_mysqlbinlog 恢复报错ERROR at line 24826643: Unknown command '\'汗血宝马...

有两个binlog日志文件mysql-bin.000001,mysql-bin.000002,大小都是1G左右。现在要在另外一个库上做完全恢复。想到通常的恢复方法:mysqlbinlog /usr/local/var/mysql1/mysql-bin.000001 | mysql -uroot -S /usr/local/var/mysql2/mysql2.sockmysqlbinlog…

oracle数据库实验讲义-读书笔记(一)

1、激活锁定的用户alter user scott account unlock identified by tiger;2、使用内含脚本建立scott用户%oracle_home%\rdbms\admin\utlsampl.sql3、查看当前用户所有的表select * from tab;4、将屏幕显示输入到文本文件内spool D:1.txtselect * from emp;spool off spool D:1.…

linux分盘笔记

一磁盘分区 首先磁盘分区:计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主…

sqlite mysql pgsql_比较MySQL,PostgreSQL和SQLite中的数据库列类型?(跨图)

小编典典我会做不同的事情清单:MySQL中的MEDIUMINT是一个奇怪的鸭子(3个字节)。我会避免它,但否则也将其映射到INTEGER。MySQLBOOLEAN(别名BOOL,别名TINYINT(1))与pg布尔类型不兼容。您可能无法移植应用程序,具体取决于它们用作布…

[导入]毕业的日子

出来快一年了,真有点怀念毕业前的那份时光。没有太多的事情可做,整天忙着以后的工作。来往与学校与市区两边。不停的学着新出来的技术,好像也有很多事情要做,想着自己以后会做什么,一点底也没有,虽然是学程…

python 析构函数_常用的python类的魔术方法

对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言。在其他面向对象的语言中有构造函数、析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的。除此之外,python类还有很多神奇的编写方式让对象的表现更加丰富…

【linux基础】关于ARM板子使用O3编译选项优化

前言 应领导要求需要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时。 平台 移植前: TX2 移植后: ARM() processor : 3 model name : ARMv7 Processor rev 10 (v7l) BogoMIPS : 7.54 Features : swp h…

微软桌面虚拟化vdi 安装测试体验

最近同事在讨论桌面虚拟化,说目前很多企业都准备上桌面虚拟化,结合众多的解决方案,觉得微软的桌面虚拟化方案不错,相对与citrix的xendesktop,vmware view 有一定的价格优势,心里想,微软是大公司&#xff0c…

ASP应用之模板采用

初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心得不偿失、前功尽弃。所以,梦想着那么大段的程序代码变成几个简单的字符代…

mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)

前言前几天下载安装了最新版的MySQL 8.0.22,遇到了不少问题,参考了一些方法,最终得以解决。今天将自己的安装过程记录下来,希望对各位有所帮助。一、MySQL 8.0.22官网下载点击进入MySQL官网:https://www.mysql.com/① …

RedHat 脚本搭建dns服务!

1.配置好yum脚本 #!/bin/bash# by breaklinux echo "--------------- mount cdrom ------------------"umount /dev/cdrom &> /dev/nullmount /dev/cdrom /mnt &> /dev/nullecho "--------------- create yum ------------------"touch /etc…

国外开源.Net 系统概述

转载自:http://www.aspx1.com (ASP.NET学习门户) 搜索了几个搜索引擎,找了一些.net的开源系统,(申明一下,下面的看只是个人看法,只供参考)。 一、DotNetNuke DotNetNuke是一个.Net平台下&#x…

dateframe行列插入和删除操作

ar np.array(list("ABCDEFG")) # array只是Convert,默认会copy源值。asarray也是Convert,如果源值是array则不copy.print(ar)ar np.full((2,4), 3, np.int32) # 创建一个指定初始值的数组print(ar)zero_ar np.zeros(10, np.int32) # 创建一个初始…