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

简介: 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回滚。这样,数据库就处于一个最新的且数据一致的状态了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
534 0
|
自然语言处理 搜索推荐 关系型数据库
MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
本文介绍了在文档管理系统中实现高效全文搜索的方案。为解决原有ES搜索引擎私有化部署复杂、运维成本高的问题,我们转而使用MySQL实现搜索功能。通过对用户输入预处理、数据库模糊匹配、结果分段与关键字标红等步骤,实现了精准且高效的搜索效果。目前方案适用于中小企业,未来将根据需求优化并可能重新引入专业搜索引擎以提升性能。
812 5
|
缓存 关系型数据库 MySQL
降低MySQL高CPU使用率的优化策略。
通过上述方法不断地迭代改进,在实际操作中需要根据具体场景做出相对合理判断。每一步改进都需谨慎评估其变动可能导致其他方面问题,在做任何变动前建议先在测试环境验证其效果后再部署到生产环境中去。
446 6
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
360 2
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
存储 SQL 关系型数据库
MySQL 动态分区管理:自动化与优化实践
本文介绍了如何利用 MySQL 的存储过程与事件调度器实现动态分区管理,自动化应对数据增长,提升查询性能与数据管理效率,并详细解析了分区创建、冲突避免及实际应用中的关键注意事项。
565 0
|
存储 关系型数据库 MySQL
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
1348 19
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
1072 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?

推荐镜像

更多