前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云自建数据库mysql为什么需要undo log?

腾讯云自建数据库mysql为什么需要undo log?

原创
作者头像
用户8639654
修改2021-08-06 17:26:18
1.5K0
修改2021-08-06 17:26:18
举报
文章被收录于专栏:云计算运维云计算运维

在腾讯云上购买了服务器然后搭建mysql数据库,为什么需要undo log呢,下面我们来详细的解答。以下讨论以MySQL的InnoDB引擎为例

  • 在InnoDB中,有三种日志跟事务的ACID关系都很大:
  1. undo log负责原子性,保护事务在exception或手动rollback时可以回滚到历史版本数据
  2. redo log负责落盘式持久性,保证事务提交后新的数据不会丢失
  3. binlog负责副本式持久性,可以将主节点上的数据复制到从节点,主节点crash后业务可以正常运转
  • 可以看到, undo log只关心过去,redo log只关心未来
  • 楼主提到『如果不提交数据,磁盘中的数据还是更新前的,事务回滚不更新数据就好了』。如果我们只记录一个历史版本数据,其它事务每次都只需要读取到最新版本的数据,的确是这样,这个就是Read Committed
  • 但是,如果说你要备份整个数据库,整个事务可能会持续一个小时,同时有大量线上并发修改操作,我相信你一定希望读取到逻辑一致的数据。这时同一行数据就需要支持多个历史版本的数据了,这一招叫MVCC,对应Repeatable Read隔离级别,而记录多个历史版本数据的地方就叫undo log
  • 实践中,对于面向个人业务的互联网在线业务,推荐Read Committed;对于分析性业务,推荐Repeatable Read(InnoDB的默认事务隔离级别)
  • InnoDB将undo log作为数据的一部分存储到了redo log中,因此很多时候不太区分它们

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档