gpt4 book ai didi

MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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存储.

?
1
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 文件内容是以顺序循环的方式写入文件,写满时则回溯到第一个文件,进行覆盖写 。

MySQL 撤销日志与重做日志(Undo 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存储 。

?
1
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)相关总结的详细内容,更多关于mysql 撤销日志与重做日志(undo log与redo log)的资料请关注我其它相关文章! 。

原文链接:https://segmentfault.com/a/1190000039698853 。

最后此篇关于MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结的文章就讲到这里了,如果你想了解更多关于MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com