AG广东会,山东十一选五,大发

?
  • AG广东会400电话
  • 微网小程序
  • AI电话山东十一选五
  • 电商代运营
  • AG广东会,山东十一选五,大发:全 部 栏 目

    AG广东会400电话 网络优化推广 AI电话山东十一选五 呼叫中心 网站建设 商标?知产 微网小程序 电商运营 彩铃?短信 增值拓展业务
    MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结

    Undo Log

    数据库事务开始之前,会将要修改的记录存放到 Undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 Undo 日志,撤销未提交事务对数据库产生的影响。

    AG广东会,山东十一选五,大发:Undo Log产生和销毁

    Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。
    Undo Log属于逻辑日志,记录一个变化过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相反的update。

    AG广东会,山东十一选五,大发:Undo Log存储

    Undo log采用段的方式管理和记录。在innodb数据文件中包含一种rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数来控制Undo log存储。

    show variables like '%innodb_undo%'; 

    Undo Log作用

    AG广东会,山东十一选五,大发:实现事务的原子性

    Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK 语句,MySQL 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。

    AG广东会,山东十一选五,大发:实现多版本并发控制(MVCC)

    Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。

    事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer中。
    事务B手动开启事务,执行查询操作,会读取 Undo 日志数据返回,进行快照读

    Redo Log

    指事务中修改的任何数据,将最新的数据备份存储的位置(Redo Log),被称为重做日志。

    AG广东会,山东十一选五,大发:Redo Log 的生成和释放

    随着事务操作的执行,就会生成Redo Log,在事务提交时会将产生Redo Log写入Log Buffer,并不是随着事务的提交就立刻写入磁盘文件。
    等事务操作的脏页写入到磁盘之后,Redo Log 的使命也就完成了,Redo Log占用的空间就可以重用(被覆盖写入)。

    AG广东会,山东十一选五,大发:Redo Log 工作原理

    Redo Log 是为了实现事务的持久性而出现的产物。防止在发生故障的时间点,尚有脏页未写入表的 ibd 文件中,在重启 MySQL 服务的时候,根据 Redo Log 进行重做,从而达到事务的未入磁盘数据进行持久化这一特性。

    AG广东会,山东十一选五,大发: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)的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • MySQL系列之redo log、undo log和binlog详解
    • 详解MySQL 重做日志(redo log)与回滚日志(undo logo)
    • MySQL中的redo log和undo log日志详解
    • 基于Redo Log和Undo Log的MySQL崩溃恢复解析
    • Mysql中undo、redo与binlog的区别浅析
    上一篇:详解MySQL 查询语句的执行过程
    下一篇:mysql常用sql与命令之从入门到删库跑路
  • 相关文章
  • ?

    ? 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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

    AG广东会官网入口(中国)官方网站-IOS/Android通用版(2026已更新)