热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql之两段提交

文章目录前言mysql的两种日志两段提交两个日志的关联总结前言之前的文章介绍过mysql的日志和索引相关的部分,今天我们接着之前的文章,继续深入研究下




文章目录


    • 前言
    • mysql的两种日志
    • 两段提交
    • 两个日志的关联
    • 总结




前言

之前的文章介绍过mysql的日志和索引相关的部分,今天我们接着之前的文章,继续深入研究下日志的两段提交。


mysql的两种日志

redo log :innodb的独有日志,也是保证事务,和安全的crash能力的基础。这个日志是记录内存页的操作(这个直接介绍过,这里不再赘述),不是追加写,是循环写。
binlog:MySQL自带的日志,不支持,安全的crash。追加写的模式。
从上面大家可以看出两个日志还是有很大的区别,所以在数据库中,一般使用的是binlog加上redo log 两种日志,来保障数据安全。而这个正是我们今天要介绍的两段提交。


两段提交

两段提交呢,基本流程如下图
在这里插入图片描述
基本上就是先写redo log然后处于准备阶段,再写binlog,然后一起提交。通俗的来说,就是redo log先说我ok了,然后等待binlog说ok,两个都ok了,然后一起提交,只要有一个不ok就不提交。
为什么这么做呢,你可以设想下不这么做会有什么后果呢。
首先假设,没有两段提交,这个时候服务器突然异常重启了,
就会导致redo log里面的日志会比binlog里面的多,也就是两个日志不一致了。而我们使用两段提交就可以完美的解决这个问题。


两个日志的关联

从上面我们可以看出,两段提交的原因是binlog不支持crash能力导致的,那什么不直接不用binlog只用redo log 呢。那是因为binlog是追加写的模式,能记录全量的日志,数据库的备份和迁移主要靠的就是binlog,而不是redo log,所以是不可能舍弃binlog的。
那么binlog和redo log怎么保持日志同步,或者说关联起来呢。这个就涉及到一个叫xid的东西,redoglog和binlog里面都有一个xid用来标识记录。两个日志也是通过这个关联起来的(两个日志的xid相同,就说明他们是同一个操作的日志记录)。


总结

总的来说,两个日志都是十分有必要的,他们都有各自的特点,所以才会有两段提交这种方式,使用两种日志,来实现数据库的日志记录。







推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 探讨GET与POST请求数据传输的最大容量
    在Web开发领域,GET和POST是最常见的两种数据传输方法。本文将深入探讨这两种请求方式在不同环境下的数据传输能力及其限制。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文详细介绍了如何在两台运行 Windows Server 2003 的计算机上配置两个 MySQL 实例以实现主从复制。每台计算机分别命名为 Master 和 Slave,确保系统分区及 MySQL 安装路径的正确配置。 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 深入解析:主流开源分布式文件系统综述
    本文详细探讨了几款主流的开源分布式文件系统,包括HDFS、MooseFS、Lustre、GlusterFS和CephFS,重点分析了它们的元数据管理和数据一致性机制,旨在为读者提供深入的技术见解。 ... [详细]
  • 本文介绍了如何处理MySQL数据库中表 'xdb.auditlog' 被标记为已损坏的问题,并提供了解决方案。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
author-avatar
淅沥的雨的海角_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有