当前位置:网站首页>Mysql持久性的实现
Mysql持久性的实现
2022-04-23 06:23:00 【cqwoniu】
1、持久性的定义
事务一旦提交,则其所有的修改将会保存到数据库当中。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit=1(如果想要关掉,要set autocommit=0,然后要手动的开启关闭),表示每次执行一条sql如果没有显示启动事务语句(begin或start transaction)就会隐试的开启一个事务。
2、实现
持久性的实现依赖于日报系统,一个是redolog,一个是binlog,我们先认熟悉一下概念。
1、redolog:称为重做日志,当有一条记录需要修改的时候,InnoDB引擎会先把这条记录写到redo log里面。redo log是物理格式日志,它记录的是对于每个页的修改。有一个字段是WAL(write ahead log), 意思是先写日志,再写数据,它有两个状态,一个是prepare,一个是commit。
2、binlog:记录了mysql执行更改了所有操作,但不包含select和show这类本对数据本身没有更改的操作。但是不是说对数据本身没有修改就不会记录binlog日志。
binlog日志的作用
恢复(recover):数据恢复
复制(replication):和恢复类似,用做主从复制
这个时候你可能会有疑问,为什么需要两个log,一个不就行了吗?接下来我们对这个问题进行解释,这也是持久性实现的原理所在。
因为MySQL是存储引擎自带的,而redo log是InnoDB特有的。最开始的时候MySQL里没有InnoDB引擎,自带的MyISAM又没有crash-safe能力,binlog日志只能用于归档。为了让MySQL具有crash-safe能力所以就引入InnoDB,而InnoDB的crash-safe能力依靠redo log,所以就有了两套日志。
Redo log和binlog都是记录事务日志,他们有什么区别?
1、binlog是mysql自带的,他会记录所有存储引擎的日志文件。而redo log是InnoDB特有的,他只记录改存储引擎产生的日志文件
记录内容不同:binlog是逻辑日志,记录这个语句具体操作了什么内容。2、Redo log是屋里日志,记录的是每个页的更改情况。
写入方式不同:redo log是循环写,只有那么大的空间。binlog采用追加写入,当一个binlog文件写到一定大小后会切换到下一个文件。
先写redo log后写binlog会怎么样呢?假设在redo log.写完,binlog还没有写完的时候,MySQL进程异常重启。由于我们前面说过的,redo log写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行c的值是1。但是由于binlogi没写完就crash了,这时候binlog!里面就没有记录这个语句。因此,之后备份日志的时候,存起来的binlog!里面就没有这条语句。然后你会发现,如果需要用这个binlog来恢复临时库的话,由于这个语句的binlog丢失,这个临时库就会少了这一次更新,恢复出来的这一行的值就是,与原库的值不同。
先写binlog后写redo log会怎么养呢?如果在binlog写完之后crash,由于redo log还没写,崩溃恢复以后这个事务无效,所以这一行c的值是0。但是binlog.里面已经记录了“把c从0改成1”这个日志。所以,在之后用binlog来恢复的时候就多了一个事务出来,恢复出来的这一行c的值就是1,与原库的值不同。
所以正确的顺序应该是:

版权声明
本文为[cqwoniu]所创,转载请带上原文链接,感谢
https://blog.csdn.net/cqwoniu/article/details/124179037
边栏推荐
- The difference between null and undefined
- 如何将进程绑定到指定的CPU上
- PyTorch 20. Pytorch tips (continuously updated)
- 免费开源智能充电桩物联网SAAS云平台
- SQL练习第一题
- go语言数组操作
- Flexible blind patch of ad hoc network | Beifeng oil and gas field survey solution
- PyTorch 11. Regularization
- Solution of emergency communication system for major security incidents
- 推导式与正则式
猜你喜欢

Metro wireless intercom system

地铁无线对讲系统

Discussion on frame construction and technology selection of short video platform

el-table 横向滚动条固定在可视窗口底部

Meishe technology launches professional video editing solution for desktop -- Meiying PC version

可视化常见问题解决方案(九)背景颜色问题

Solution of self Networking Wireless Communication intercom system in Beifeng oil and gas field

Us photo cloud editing helps BiliBili upgrade its experience

不需要破解markdown编辑工具Typora

Jiangning hospital DMR system solution
随机推荐
How to improve the service efficiency of the hotel without blind spots and long endurance | public and Private Integrated walkie talkie?
manjaro安装与配置(vscode,微信,美化,输入法)
直观理解熵
USO technology was invited to share the technical framework and challenges of AI synthetic virtual characters at lvson2020 conference
通用型冒泡、选择、插入、希尔、快速排序的代码实现
开发板如何ping通百度
How does the public and Private Integrated walkie talkie realize cooperative work under multi-mode communication?
Metro wireless intercom system
小程序换行符\n失效问题解决-日常踩坑
Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
What is a closure?
Typora操作技巧说明(一).md
vim+ctags+cscpope开发环境搭建指南
不需要破解markdown编辑工具Typora
可视化常见绘图(三)面积图
ES6之箭头函数细谈
C语言的指针符号到底靠近变量类型还是变量名?
LATEX使用
技术小白的第一篇(表达自己)
菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记