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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 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 字(可选)




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
23天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
57 6
|
7月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
526 90
|
5月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
220 23
|
6月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
6月前
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
146 16
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
115 4
|
7月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
869 0
|
23天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
58 3
|
29天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多