mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
mysql常用四种日志
MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结undo log
数据库事务开始之前,会将要修改的记录存放到 undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 undo 日志,撤销未提交事务对数据库产生的影响。
undo log产生和销毁
undo log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。
undo log属于逻辑日志,记录一个变化过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相反的update。
undo log存储
undo log采用段的方式管理和记录。在innodb数据文件中包含一种rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数来控制undo log存储。
|
show variables like '%innodb_undo%' ; |
undo log作用
实现事务的原子性
undo log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 rollback 语句,mysql 可以利用 undo log 中的备份将数据恢复到事务开始之前的状态。
实现多版本并发控制(mvcc)
undo log 在 mysql innodb 存储引擎中用来实现多版本并发控制。事务未提交之前,undo log保存了未提交之前的版本数据,undo log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。
事务a手动开启事务,执行更新操作,首先会把更新命中的数据备份到 undo buffer中。
事务b手动开启事务,执行查询操作,会读取 undo 日志数据返回,进行快照读
redo log
指事务中修改的任何数据,将最新的数据备份存储的位置(redo log),被称为重做日志。
redo log 的生成和释放
随着事务操作的执行,就会生成redo log,在事务提交时会将产生redo log写入log buffer,并不是随着事务的提交就立刻写入磁盘文件。
等事务操作的脏页写入到磁盘之后,redo log 的使命也就完成了,redo log占用的空间就可以重用(被覆盖写入)。
redo log 工作原理
redo log 是为了实现事务的持久性而出现的产物。防止在发生故障的时间点,尚有脏页未写入表的 ibd 文件中,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的未入磁盘数据进行持久化这一特性。
redo log 写入机制
redo log 文件内容是以顺序循环的方式写入文件,写满时则回溯到第一个文件,进行覆盖写
write pos 是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到 0 号文件开头;
checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件;
write pos 和 checkpoint 之间还空着的部分,可以用来记录新的操作。如果 write pos 追上checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint 推进一下。
redo log相关配置参数
每个innodb存储引擎至少有1个重做日志文件组(group),每个文件组至少有2个重做日志文件,默认为ib_logfile0和ib_logfile1。可以通过下面一组参数控制redo log存储
|
show variables like '%innodb_log%' ; |
redo buffer 持久化到 redo log 的策略,可通过 innodb_flush_log_at_trx_commit 设置
0:每秒提交 redo buffer ->os cache -> flush cache to disk,可能丢失一秒内的事务数据。由后台master线程每隔 1秒执行一次操作。
1(默认值):每次事务提交执行 redo buffer -> os cache -> flush cache to disk,最安全,性能最差的方式。
2:每次事务提交执行 redo buffer -> os cache,然后由后台master线程再每隔1秒执行os cache -> flush cache to disk 的操作。
一般建议选择取值2,因为 mysql 挂了数据没有损失,整个服务器挂了才会损失1秒的事务提交数据。
以上就是mysql 撤销日志与重做日志(undo log与redo log)相关总结的详细内容,更多关于mysql 撤销日志与重做日志(undo log与redo log)的资料请关注开心学习网其它相关文章!
原文链接:https://segmentfault.com/a/1190000039698853
- mysql 高级查询语法(MySQL查询语句进阶知识集锦)
- mysql 如何选择隔离级别(全面解析MySQL中的隔离级别)
- mysql8.0.25安装教程(Mysql8.0.17安装教程推荐)
- mysql存储过程遍历数据(Mysql 存储过程中使用游标循环读取临时表)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- mysql各种查询方式(mysql查询的控制语句图文详解)
- mysql长连接释放和不释放的问题(解决MySQL存储时间出现不一致的问题)
- mysql完整整理(Mysql隔离性之Read View的用法说明)
- mysql发生系统错误(MySQL too many connections错误的原因及解决)
- mysql根据子节点查询父节点(mysql 递归查找菜单节点的所有子节点的方法)
- mysqlint后面的4是什么意思(MySQL中intn后面的n到底代表的是什么意思)
- python在mysql创建数据库(python3对接mysql数据库实例详解)
- mysql 自定义排序
- mysql中怎么删除整张表(MySQL如何优雅的删除大表实例详解)
- navicat for mysql连接测试失败(Navicat连接虚拟机mysql常见错误问题及解决方法)
- mysql主从复制如何解决延迟(MySQL 8.0.23中复制架构从节点自动故障转移的问题)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
热门推荐
- 虚拟云服务器如何安装宝塔(云服务器宝塔面板的安装图文教程详解)
- dedecms关闭站点(dedecms恶意注册与发广告文章的解决办法)
- docker容器临时网络连接(Docker与iptables及实现bridge方式网络隔离与通信操作)
- python拖动选择文件操作(python通过paramiko复制远程文件及文件目录到本地)
- 阿里云服务ecs操作系统(阿里云ECS服务器CentOS7上安装服务器安全狗Linux版)
- 阿里云ftp搭建(阿里云服务器搭建FTP服务器图文教程windows)
- vue设置div大小(Vue实现div滚轮放大缩小)
- php支付接口(PHP实现的支付宝支付功能示例)
- 微信小程序开发模式(微信小程序引入Vant框架的全过程记录)
- javascript的作用域详解精简版(浅谈JavaScript 中的延迟加载属性模式)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9