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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 《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 
目录
相关文章
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
434 158
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1005 152
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
808 156
|
5月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
402 156
|
5月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
5月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
5月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
5月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
573 7
|
5月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
180 6
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多