【MySQL架构图】

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

   

  • 连接器:用于连接管理,进行身份认证及权限相关的管理。(登录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索引使用的数据结构主要有BTree索引 和 哈希索引 。查询结果为单条时,哈希索引性能更好;其余场景BTree索引更优。

InnoDB存储引擎下,数据文件和索引文件是一体的。表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。

【MySQL日志模块】

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

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

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

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

【MySQL部署模式】

  • 单点模式。常用的部署模式,但无法实现容灾。
  • 主从模式。一主多从,读写分离。解决单点负载瓶颈。主节点宕机,需将从节点切换为主节点来保证服务可用。
    • 主从模式下数据同步过程:
      1. 主节点负责写,并将更改操作记录到归档日志bin log中;
      2. 从节点的IO线程将主的binlog事件(sql语句) 同步本机上并记录在中继日志relay log里;
      3. 从节点的SQL线程按照relay log中记录顺序执行SQL,使得主从数据同步。
  • 集群模式。各节点均可对外提供读写服务,一个节点写的操作会同步到其他所有节点以满足数据一致性。但任意节点宕机不影响集群服务。

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

1、https://github.com/Snailclimb/JavaGuide

2、https://blog.csdn.net/AGambler/article/details/84672849

关系型数据库——MySQL的更多相关文章

  1. Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql

    一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...

  2. MongoDB 与传统关系型数据库mysql比较

    与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...

  3. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  4. 关系型数据库MySQL多实例

    简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...

  5. Python3爬虫(九) 数据存储之关系型数据库MySQL

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列 ...

  6. 关系型数据库MySql简介

    什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...

  7. sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理

    .关系型数据库 有库有表,有关系 非关系型数据库  存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...

  8. 关系型数据库MySQL主从同步-读写分离

    1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...

  9. 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据

    版本号 最新的solr版本 : Solr 8.1.1下载地址:https://lucene.apache.org/solr/downloads.html solr-8.1.0.tgz for Linu ...

  10. 关系型数据库MySql 数据类型与约束

    MySql数据库 :数据类型与约束 注意 :  在创建数据表的时候,需要对数据表中的字段设置 数据类型和约束, 便于检测用户输入的数据是否正确有效. 1 数据类型 数据类型的选用原则 : 够用就行,尽 ...

随机推荐

  1. cordova 与 phonegap关系

    Apache Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.PhoneGap是一个开源的开发框架,使用HTML ...

  2. hdu多校第一场1005(hdu6582)Path 最短路/网络流

    题意: 在无向图上删边,让此图上从起点到终点的最短路长度变大,删边的代价是边长,求最小代价. 题解: 先跑一遍迪杰斯特拉,求出所有点的d[]值,然后在原图上保留所有的边(i,j)仅当i,j满足d[j] ...

  3. 李宏毅机器学习课程---4、Gradient Descent (如何优化 )

    李宏毅机器学习课程---4.Gradient Descent (如何优化) 一.总结 一句话总结: 调整learning rates:Tuning your learning rates 随机Grad ...

  4. Python 查看QQ状态

    import requests """ 该程序依赖于QQ的端口程序 返回数据:String,Y = 在线:N = 离线:E = QQ号码错误:A = 商业用户验证失败:V ...

  5. 剑指offer——10跳台阶演变

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   题解: 纯找规律题:   class Solution { public: ...

  6. Flutter BottomNavigationBar切换会刷新当前页面解决方

    问题描述 BottomNavigationBar 是flutter 中最常用的UI组建,刚接触时发现在切换tab 的时候,会刷新当前的所有状态,每个页面都会重新刷新.于是乎,在这里先记录下解决方案. ...

  7. OC开发系列-@property和@synthesize

    property和synthesize 创建一个Person类.提供成员属性的_age和_height的setter和getter方法. #import <Foundation/Foundati ...

  8. 【学术篇】SDOI2017 数字表格

    ======传======送======门======在======里======面====== 去年忘记可以预处理了... 然后就打了10pts的暴力... 现在学了莫比乌斯反演就可以来做了 这个题 ...

  9. 牛客CSP-S提高组赛前集训营1

    牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...

  10. win10安装mysql__艰难的心路历程

    俺是新系统,嘿嘿嘿 首先,把下载好的压缩包解压到安装目录中,哪个盘可以. 第二,先创建my.ini文件,不然待会忘了.在文件中添加以下内容: [mysqld] port = basedir=C:\Wi ...