浅谈Mysql原理与优化(七)——崩溃恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL数据库作为一个主流数据库,对于意外宕机的情况下,数据的一致性和完整性,必须要有保障,那么具体原理是怎样的呢

MySQL数据库作为一个主流数据库,对于意外宕机的情况下,数据的一致性和完整性,必须要有保障,那么具体是怎么保障的呢。

对于数据的完整性保障,MySQL的架构中,这个任务取决于具体的存储引擎。

  • 像MyISAM这类的存储引擎,没有事务支持,并不能很好的保证数据的完整性。如果突然断电,则可能会出现数据文件损坏,此时需要用通过mysiamchk工具来进行修复。
  • 像Memory这类更为简单的存储引擎,掉电数据就没有了,只能人为介入,重新恢复
  • 像InnoDB这样比较高级的存储引擎,数据的一致性和完整性的保存,已经设计的比较完备了,可以在各种意外崩溃情况发生下保证数据的一致性。是通过以下几个技术来实现的。

WAL( Write-Ahead Logging)

image.png

这是InnoDB使用的重要的数据一致性保证的技术之一,即先写日志,假设我们更新A表中的某一行数据,MySQL会将这个操作作为一个日志记录在名为Redo Log的日志中,然后更新内存数据块,并不要求马上更新数据表磁盘文件,会在合适的时候再把内存中的数据块刷新到磁盘上。
这样的好处是把对磁盘的随机访问,变成了顺序访问,提高了效率。

Redo Log
正如刚才所讲,Redo Log中记录了执行的数据库操作。具体来讲,Redo Log 有内存中的Redo Log Buffer 和磁盘中的 Redo Log File,数据库操作会先写入到内存中的Redo Log Buffer中,一旦Redo Log Buffer 写满,或者事务提交了,就需要把Redo Log buffer写入到 Redo Log File中持久化储存起来

Undo Log
Undo Log是和和数据库操作的反向操作,进行一次数据库修改就会产生一组对应的Undo Log 用来回滚数据操作和实现MySQL的多版本控制MVCC。Undo Log的产生也会产升Redo Log,所以他的持久化是可以通过Redo Log来保证的。

崩溃恢复
如果一个InnoDB数据库处于意外停止的情况下,他会怎样恢复呢,InnoDB会首先重放所有磁盘中的Redo Log。这是会将数据文件更新到尽可能最新的状态(包括所有未回滚的事务),同时一会把Undo Log初始化到崩溃前的状态(由于Undo Log受Redo Log保护),最后再将所有为未提交的事务用Undo Log回滚。这样,数据库就处于一个最新的且数据一致的状态了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
98 9
|
12天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
15天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
57 18
|
14天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
19 7
|
14天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
46 5
|
1月前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
25天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
37 2
|
1月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
113 3