mysql 写undolog_Mysq bin redo undo log
1. undo log
undo日志用于存放数据修改被修改前的值,是逻辑日志,比如delete sql 对应的undo log是一条insert sql。undo log作用有两个,一个是用于事务回滚操作,保证事务原子性,部分解决持久性;另一个是对MVCC实现,即MVCC实现是依赖于undo log的。
实现原子性和持久化的事务的简化过程
假设有A、B两个数据,值分别为1,2。
A.事务开始.
B.记录A=1到undolog.
C.修改A=3.
D.记录B=2到undolog.
E.修改B=4.
F.将undolog写到磁盘。
G.将数据写到磁盘。
H.事务提交
这里有一个隐含的前提条件:‘数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘’。
之所以能同时保证原子性和持久化,是因为以下特点:
A.更新数据前记录Undo log。
B.为了保证持久性,必须将数据在事务提交前写到磁盘。只要事务成功提交,数据必然已经持久化。
C.Undo log
必须先于数据持久化到磁盘。如果在G,H之间系统崩溃,undo log是完整的,可以用来回滚事务
D.如果在A-F之间系统崩溃,因为数据没有持久化到磁盘。所以磁盘上的数据还是保持在事务开始前的状态。
缺陷:每个事务提交前将数据和Undo Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。
如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一种机制来实现持久化,即 redo log
2. redo log
记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态。注意,redo log 和 undo log都是顺序io,而普通数据写磁盘是随机io,顺序io极大的提高了效率。
-Undo+Redo
事务的简化过程
假设有A、B两个数据,值分别为1,2.
A.事务开始.
B.记录A=1到undolog.
C.修改A=3.
D.记录A=3到redolog.
E.记录B=2到undolog.
F.修改B=4.
G.记录B=4到redolog.
H.将redolog写入磁盘。
I.事务提交
-Undo+Redo
事务的特点
A.为了保证持久性,必须在事务提交前将RedoLog持久化。
B.数据不需要在事务提交前写入磁盘,而是缓存在内存中。
C.RedoLog保证事务的持久性。
D.UndoLog保证事务的原子性。
E.有一个隐含的特点,数据必须要晚于redolog写入持久存储
3. bin log
binlog,即二进制日志,它记录了数据库上的所有改变,并以二进制的形式保存在磁盘中;
它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制(主从数据库的复制)。
4. slow log 慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10s以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数slow_query_log,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
5. 为什么MySQL有binlog,还有redo log?
这个是因为MySQL体系结构的原因,MySQL是多存储引擎的,不管使用那种存储引擎,都会有binlog,而不一定有redo log,简单的说,binlog是MySQL Server层的,redo log是InnoDB层的。以及redo log是不停的append的,bin log是事务提交后才会触发io写的
http://www.ywnds.com/?p=7892 《binlog 与 redo log 顺序一致性问题》
mysql 写undolog_Mysq bin redo undo log相关推荐
- Innodb中的buffer poll和redo undo log
内存缓冲池 buffer pool,如果mysql不使用内存缓冲池,每次读取数据时,都需要访问磁盘,会大大的增加磁盘的IO请求,导致效率低下:在Innodb引擎在读取数据的时候,把相应的数据和索引载入 ...
- 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- MySQL binlog和redo/undo的概念
binlog:binlog是二进制日志文件,用于记录mysql的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),在mysql主从复制中就是依靠的binlog.在mysq ...
- MYSQL专题-MySQL三大日志binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...
- mysql重做日志与binlog日志区别_MySQL日志之binlog、redo log、undo log
1. binlog(二进制日志) 1.1 binlog介绍 binlog记录了对数据库执行更改的所有操作(不包括查询),还包括了执行数据库更改操作的时间和执行时间等信息.binlog主要有两个作用:恢 ...
- bin log,redo log以及undo log详解
1 bin log 1.1 定义 bin log应该说是Mysql里最核心的日志,是MySQL数据库级别的文件,记录对MySQL数据库各种引擎下执行修改的所有操作(包括DDL和DML语句),不会记录s ...
- 必须了解的MySQL三大日志:binlog、redo log和undo log
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 六点半起床 juejin.im/post/68602522 ...
- 精讲 MySQL 事务日志:redo log 和 undo log
来源:https://blog.csdn.net/demonson/article/details/104369733 innodb事务日志包括redo log和undo log.redo log是重 ...
- 必须了解的mysql三大日志-binlog、redo log和undo log
来源:https://juejin.im/post/6860252224930070536 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括错误日志. ...
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
MySQL中有六种日志文件, 分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log). ...
最新文章
- 【新周报(051)】Datawhale组队学习
- C语言开发单片机如何避免全局变量过多混乱
- 青茶什么时候拆_篮球:挡拆是艺术,绝知要躬行,最简单也是最复杂的篮球战术...
- DPDK — TestPMD
- gorm存指针数据_gormt: gormt 是一个数据库映射工具,可以将 mysql 数据库自动生成 golang sturct 结构...
- 第一章 代码无错就是优吗?(简单工厂模式)
- Linux:客户端的实现
- LeetCode 1615. 最大网络秩(出入度)
- Ubuntu扩展触摸屏触控错位修复
- 超级灰色按钮克星1.4.1309.12
- linux接收数据并保存到环形缓冲区,自定义print函数缓存打印数据到环形缓冲区...
- SHELL脚本之自动化安装通用二进制格式MariaDB
- 计蒜客挑战难题:字符串长度
- windows编程点滴(一)之Windows获取系统中所有进程
- java shuffle list_static void shuffle(Listlt;?gt; list)_Java.util包|WIKI教程
- java 读音_数的读法 (Java代码)
- 企业逼迫员工离职,员工可以收集哪些证据进行维权?
- 数字化时代的新形式下,如何提升客户满意度,实现客户成功?
- 国企数字化转型主要工作
- 【C语言】圆球体计算:已知球的表面积公式为s=4πr2,体积公式为v=4/3πr3,若公式中π取值为3.14159,编写程序,输入半径r,输出球的表面积和体积。 个人题解
热门文章
- 详解 undefined 与 null 的区别
- java基础回顾---static关键字
- JDK动态代理的使用,以及可以解决哪些问题和优点,什么是动态代理
- php修改另一个文件内容,php如何修改文件内容
- The file is absent or does not have execute permission This file is needed to run this program
- 【转】在唯一密钥属性“value”设置为“***”时,无法添加类型为“add”的重复集合项解决方法
- PetShop的系统架构设计
- 无刷新,动态设置页面焦点的问题
- 5分钟了解分页的那些事?
- Node Stream 入门与深入