mysql关系型数据库的原理_关系型数据库MySQL——底层原理

MySQL架构图

MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务。

011107f70d3527ebc6d5a788e8fcbbed.png

连接器:用于连接管理,进行身份认证及权限相关的管理。(登录MySQL)

查询缓存区:执行查询语句时,先从缓存区查询。(该功能V8.0之后移除)

分析器:未命中缓存时,对SQL进行词法分析、语法分析。

优化器:按照MySQL认为的最优方案,生成执行计划。

执行器:执行SQL,并从存储引擎返回数据。

存储引擎:存储数据,提供读写接口

MySQL存储引擎

V5.5之前,MySQL的默认存储引擎为MyISAM(ISAM:Indexed Sequential Access Method,即有索引的顺序访问方法。MyISAM是基于传统的ISAM优化而来)

V5.5之后,MySQL的默认存储引擎便更改为InnoDB,主要是为支持数据库事务安全而设计。

MyISAM vs InnoDB

锁:MyISAM支持表级锁;InnoDB支持行级锁(默认)。因此并发操作时,InnoDB的效率要更高。

性能:MyISAM执行大量select和insert操作时,效率更高;InnoDB执行大量update和insert操作时,效率更高。

外键:MyISAM不支持;InnoDB支持外键。

事务:MyISAM不支持事务操作;InnoDB支持数据库事务。

崩溃后安全恢复:MyISAM不支持;InnoDB支持。

MVCC:MVCC:Multi-Version Concurrency Control,基于多版本的并发控制协议。作用于READ COMMITTED 和 REPEATABLE READ 两个隔离级别下,是一种乐观锁,相对基于锁的并发控制更加高效。最基本的原则是:读不加锁,读写不冲突。仅InnoDB支持。

MySQL日志模块

MySQL的Server层自带有归档日志模块 bin log,每当MySQL执行更新操作时(insert、delete、update),SQL执行记录会记录到该日志中。该日志模块为所有存储引擎所共享。

引擎层中的InnoDB存储引擎还独有一个重做日志模块 redo log,也会用来记录SQL执行更新的操作。该模块可以保证MySQL崩溃后安全恢复,也是InnoDB可以支持事务操作的重要模块。

使用InnoDB执行更新操作的流程:

【分析器 —— 权限验证 —— 执行器 —— 存储引擎 ——记录redo log(prepare状态) —— 记录bin log —— 记录redo log(commit状态)】

MySQL部署模式

单点模式。常用的部署模式,但无法实现容灾。

主从模式。一主多从,读写分离。解决单点负载瓶颈。主节点宕机,需将从节点切换为主节点来保证服务可用。主从模式下数据同步原理及过程如下:

7e42ccccca9d27b5fbda90177c81362c.png

- 主节点负责写,并将更改操作记录到归档日志bin log中;

- 从节点的IO线程将主节点的bin log事件(sql语句) 同步至本机并记录在 中继日志relay log 里;

- 从节点的SQL线程按照中继日志relay log逐行执行SQL,使得主从数据同步。

多主集群模式。同时设置多个主节点,已解决单个主节点的单点故障问题。主节点之间会进行操作复制,通过serverId避免循环复制的发生。

参考资料:(文章仅做交流学习,侵权即删!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值