MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持

《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》


添加图片注释,不超过 140 字(可选)

MySQL 中的日志主要有三种类型:二进制日志(Binary Log),重做日志(Redo Log),和撤销日志(Undo Log)。这三种日志在 MySQL 中扮演着不同的角色,以确保数据库的 ACID 特性(原子性、一致性、隔离性、持久性)。

一、MySQL三大日志


添加图片注释,不超过 140 字(可选)


1. 二进制日志(Binary Log)

作用

  • 记录所有对数据的修改操作,包括插入、更新、删除等。
  • 用于数据复制(replication)、点对点复制(binary log based replication)、数据备份和恢复。

特点

  • 以二进制形式存储,不可读。
  • 可以包含多种事件类型,如表映射、写入行、更新行、删除行等。

查看和导出

# 查看二进制日志内容 mysqlbinlog binlog-file # 将二进制日志转换为 SQL 语句 mysqlbinlog binlog-file | mysql -u root -p

2. 重做日志(Redo Log)

作用

  • 记录数据页的物理修改操作,确保事务的持久性。
  • 在事务提交前,将修改操作写入重做日志,以防数据库崩溃导致数据丢失。

特点

  • 存储在磁盘上,通常是两个文件:ib_logfile0ib_logfile1
  • 循环写入,保证事务的顺序性和原子性。

调整配置

# 在 MySQL 配置文件中修改重做日志文件大小 [mysqld] innodb_log_file_size=100M

3. 撤销日志(Undo Log)

作用

  • 记录事务对数据所做的修改的逆操作。
  • 用于事务回滚和 MVCC(多版本并发控制)。

特点

  • 存储在表空间中,通常是 ibdata1 文件。
  • 事务提交后,撤销日志用于回滚事务或提供一致性读取。

查看撤销日志

SHOW ENGINE INNODB STATUS;

这三种日志共同工作,确保了 MySQL 数据库的稳定性和一致性。在数据库的正常运行中,这些日志是透明的,但在需要进行数据复制、备份和恢复时,它们发挥着关键的作用。

二、事务日志

2.1、作用

MySQL 的 redo log 和 undo log 是两个重要的日志文件,它们用于确保数据库的持久性和可恢复性。

redo log 的作用

redo log 是用来记录数据库事务的更改的一种日志。记录的是数据库事务的物理修改。它记录了事务对数据页的实际更改操作,通常是新数据的修改。这样,在数据库崩溃或重启后,通过重做日志可以重新应用这些修改,确保事务的持久性。

当用户执行 DML 或 DDL 语句时,MySQL 会将这些更改记录到 redo log 中。当 MySQL 服务器崩溃时,可以使用 redo log 将数据库恢复到事务开始时的状态。

redo log 是 MySQL 数据库持久性的关键。如果没有 redo log,在 MySQL 服务器崩溃后,数据库可能会丢失所有更改。

undo log 的作用

undo log 是用来记录数据库事务的回滚信息的一种日志。它用于在用户撤销或回滚事务时恢复数据。

当用户执行 DML 语句时,MySQL 会将这些更改记录到 redo log 中,并将旧数据记录到 undo log 中。当用户撤销或回滚事务时,可以使用 undo log 将数据库恢复到事务开始前的状态。

undo log 是 MySQL 数据库可恢复性的关键。如果没有 undo log,用户无法撤销或回滚事务。

redo log 和 undo log 的区别

redo log 和 undo log 的主要区别如下:

属性

redo log

undo log

作用

记录数据库事务的更改,用于在 MySQL 服务器崩溃后恢复数据

记录数据库事务的回滚信息,用于在用户撤销或回滚事务时恢复数据

记录的内容

数据库事务的更改

数据库事务的旧数据

使用场景

用于数据库恢复

用于数据库撤销和回滚


添加图片注释,不超过 140 字(可选)


在实际使用中,MySQL 会同时使用 redo log 和 undo log。redo log 用于确保数据库的持久性,undo log 用于确保数据库的可恢复性。


添加图片注释,不超过 140 字(可选)


  • Redo Log 保证事务的 "提交后" 的修改能够被重新应用,以防止数据在持久化时的丢失,从而恢复数据库到提交后的状态。
  • Undo Log 记录了事务对数据的 "修改前" 的逆操作,用于回滚事务或提供一致性读取,以确保数据库在事务执行期间的一致性。

MySQL通过 Redo Log 和 Undo Log 的协同工作,数据库能够在事务的执行、崩溃和恢复过程中保持一致性,并在需要时将数据恢复到事务开始时的状态。

2.2、开启

MySQL redo log 和 undo log 不需要手动开启。它们都是 MySQL 默认开启的。

redo log 是 MySQL 持久性的关键,因此它是默认开启的。如果 redo log 没有开启,则在 MySQL 服务器崩溃后,数据库可能会丢失所有更改。

undo log 是 MySQL 可恢复性的关键,因此它也是默认开启的。如果 undo log 没有开启,则用户无法撤销或回滚事务。

2.3、与binlog是否重复

  • Redo Log 是为了确保事务的持久性,特别是在数据库崩溃的情况下。它记录的是 InnoDB 引擎对数据页的物理修改,是一种保障数据完整性和持久性的机制。
  • Undo Log 是为了支持事务的回滚和提供一致性读取。在事务执行过程中,可能需要撤销某些操作,而 Undo Log 记录了这些逆操作。
  • Binlog 则记录了对数据库的整体更改,而不仅仅是 InnoDB 存储引擎的更改。它对于数据库的复制、备份和恢复非常重要,同时也用于实现高可用性。

虽然它们都与事务和日志有关,但由于各自的设计目标和使用场景不同,它们是互补而不是冗余的。在数据库系统中,这些机制的共同作用确保了数据的一致性、持久性以及系统的可靠性。

三、InnoDB和MyISAM

MySQL 支持多种存储引擎,其中 InnoDB 和 MyISAM 是两个常用的引擎。它们在性能、事务支持、锁定机制等方面存在一些显著的区别。以下是 InnoDB 和 MyISAM 的一些主要区别:

1. 事务支持

  • InnoDB
  • 提供事务支持,支持ACID(原子性、一致性、隔离性、持久性)特性。
  • 支持行级锁定,使得多个事务可以并发执行而不会导致数据不一致。
  • MyISAM
  • 不提供事务支持,不支持事务的回滚和提交。
  • 锁定级别较低,只支持表级锁定,容易导致并发写入冲突。

2. 锁定机制

  • InnoDB
  • 使用行级锁定(row-level locking),允许多个事务同时对不同的行进行操作。
  • 对于读操作,InnoDB 不会进行锁定,允许多个事务并发执行。
  • MyISAM
  • 使用表级锁定(table-level locking),对整个表进行锁定。
  • 读操作和写操作都会对整个表进行锁定,可能导致性能瓶颈。

3. 并发性

  • InnoDB
  • 更适合高并发环境,支持更多的并发写入操作。
  • 对于读操作,多个事务可以同时进行,不会相互阻塞。
  • MyISAM
  • 适合读密集型操作,对于写操作并发能力相对较弱。
  • 由于表级锁定,写操作可能会导致整个表的阻塞。

4. 事务安全表和崩溃恢复

  • InnoDB
  • 提供事务安全表,支持崩溃恢复。
  • 通过事务日志(redo log)和撤销日志(undo log)实现崩溃恢复。
  • MyISAM
  • 不提供事务安全表,对于崩溃的恢复能力较差。
  • 不支持事务日志和撤销日志。

5. 索引

  • InnoDB
  • 支持全文索引、空间索引等多种类型的索引。
  • 使用聚集索引,数据文件和索引文件是相互交织的。
  • MyISAM
  • 不支持全文索引和空间索引。
  • 使用非聚集索引,数据文件和索引文件是分开存储的。

6. 表的关联性

  • InnoDB
  • 适合关联性较强的表,支持外键约束。
  • 外键约束确保了关联表之间的数据一致性。
  • MyISAM
  • 不支持外键约束,适合简单的查询和读操作。
  • 对于表之间关联性要求较高的应用,MyISAM 较为不适用。

以下是 InnoDB 和 MyISAM 存储引擎在一些关键方面的比较:

添加图片注释,不超过 140 字(可选)




相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
监控 Oracle 关系型数据库
Mysql、Oracle审计日志的开启
通过上述步骤,可以在 MySQL 和 Oracle 数据库中启用和配置审计日志。这些日志对于监控数据库操作、提高安全性和满足合规性要求非常重要。确保正确配置审计参数和策略,定期查看和分析审计日志,有助于及时发现并处理潜在的安全问题。
25 11
|
28天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
2月前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
132 10
|
2月前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
3月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
3月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
281 6
|
3月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
284 3
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。
|
3月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
816 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。

热门文章

最新文章