一、MySQL简单介绍
    MySQL是当今最流行的开源数据库管理系统,超过10亿的下载量足可以证明这点。MySQL以其速度、高可靠性、简单易用,广泛应用,一些大型企业也在逐渐应用,如:Facebook、维基百科等网站。MySQL最早由瑞典的MySQL AB公司开发,后于2008年被Sun收购,2009年Oracle公司收购了Sun公司。它分为社区版和商业版,其体积小、速度快、总体成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
二、MySQL的基本组成部分流程图:
流程图详解:
 
    所有的用户连接请求都是先发往连接管理器的,连接管理器(是一个侦听器)用于侦听来自客户端的连接,并接受用户请求,用户请求被接收下来,而一个用户请求需要一个线程来响应,因此需要一个线程管理器。线程管理器负责给用户创建生成新的线程或完成线程重置的方式给用户一个响应线程,用户连接进来后需要检查用户权限(是否允许访问mysql服务器等等权限)。这时就需要用户模块出场了,用户模块负责管理用户是否能够连接的,这是管理权限的第一关,如果用户不能请求,那用户请求就终止了,因此用户模块还负责退回用户请求(主要作用是验证用户请求和用户身份的)。
    一旦用户具有连接的权限,那用户就可以发一些SQL语句,而每一个SQL语句需要进行分析,不同的语句需要分配给不同的解析器,因此就需要命令分发模块,就把这些不同类型的语句分配给与之对应的解析器上去。如果命令在分发之前是一个查询语句,而且我们的缓存中有内容,就可以直接返回给用户结果了,因此也有可能会跟缓存模块进行交互。当用户发起一个命令之后,例如我们的web,当用户请求资源后,都会记录在日志中的,因此命令分发模块也有可能会和日志模块进行交互的,日志模块的主要功能是记录用户查询的。缓存模块和日志模块并不是并行的,命令分发模块给两者都有可能有交互的。
    如果缓存中没有就要将用户请求的命令分发出去,将命令交给解析器(解析查询生成解析数),由解析器判断命令最终属于哪种语句,如果解析器解析此命令是select语句,需要交给优化器进行优化。如果是update、insert、delete语句,需要交给表定义模块(这一过程也要进行权限的判断)。mysql也有与repair相关的语句,那可想而知需要表维护模块了,表维护模块主要作用是修复表中的某些逻辑错误的。mysql中也有很多状态变量,而这些状态变量也需要状态报告模块来存储每一个执行过程中的状态信息。mysql也有复制的功能,把主mysql服务器上的数据同步到从mysql服务器上的过程,这就是复制模块的功能。
    无论哪个模块,用户最终要完成操作,必须要检查用户是否具有权限,上面所说的表定义模块、表维护模块都需要检查用户权限,因此最终这些命令语句都要交给访问控制模块来控制:用于检验客户端用户的操作是否具有足够的操作权限,来执行请求操作如果访问模块检查后发现没有任何问题,会把这些命令语句交给另一个组件表管理器,由表管理器完整真正意义上的操作,表管理器负责创建、读取或修改表定义文件的。表管理器交给存储引擎(存储引擎的接口),存储引擎交给最核心的-->MYISAMINnoDB

本文出自 “丽的博客” 博客,请务必保留此出处http://jilili.blog.51cto.com/6617089/1188011

原来MySQl就是这样工作的!的更多相关文章

  1. 读书笔记——《MySQL DBA 工作笔记》

    关于前言 作者在前言中提出的一些观点很具有参考价值, 梳理完整的知识体系 这是每一个技术流都应该追逐的,完整的知识体系能够使我们对知识的掌握更加全面,而不仅仅局限于点 建立技术连接的思维,面对需求,永 ...

  2. MySQL:索引工作原理

    索引查找:通过索引键找到索引的叶子节点,再通过叶子节点的标记快速找到表中对应的行数据,再返回指定的列 索引找查是通过索引键定先位到一块局部区域,再开始扫描匹配的数据的. 为什么需要索引(Why is ...

  3. 【mysql】工作中mysql常用命令及语句

    1.查看mysql版本号 MySQL [release_test_oa]> select version(); +------------+ | version() | +----------- ...

  4. MySQL之mysql客户端工作的批处理一些使用手法

    通常我们会用mysql这个客户端程序来连接mysql库.这个通常是工作在交互式模式下的.如我们连接上mysql并执行如下操作: mysql -uroot -h127. -P3306 Welcome t ...

  5. mysql索引工作原理、分类

    一.概述 在mysql中,索引(index)又叫键(key),它是存储引擎用于快速找到所需记录的一种数据结构.在越来越大的表中,索引是对查询性能优化最有效的手段,索引对性能影响非常关键.另外,mysq ...

  6. MySQL MHA工作原理

    MHA工作组件 MHA(Master High Availability)是一种MySQL高可用解决方案,由日本DeNA公司开发,主要用于在故障切换和主从提升时进行快速切换,并最大程度保证数据一致性. ...

  7. MySQL索引工作原理

    为什么需要索引(Why is it needed)?当数据保存在磁盘类存储介质上时,它是作为数据块存放.这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性.硬盘数据块存储结构类似于链表,都包 ...

  8. MySQL DBA工作角色和职责介绍

    MySQL DBA分架构DBA,运维DBA和开发DBA三种角色,职责介绍如下:

  9. Mysql 复制工作原理

    数据库配置的时候,一定要开启二进制日志,如果开始没开启后来再想开启的话,必须重启. 基于日志点的复制 备份数据库工具 ----------------------------------------- ...

随机推荐

  1. BizTalk开发系列(十九) BizTalk命名规范

    目前BizTalk项目的开发人员比较少,但是在开发过程中还是需要命名规范的约束.根据以往BizTalk项目的经验,整理了BizTalk命 名规范.包括:BizTalk Application, Sch ...

  2. php课程---数组

    数组:    一:定义 1.赋值定义    $arr[0] = 5;    $arr[1] = "aa";        print_r ($arr); 2.定义索引数组    $ ...

  3. php实现实现代码多主从,切换,轮询,健康检查

    现在很多框架现在都提供数据库读写分离,比如CI,TP,YII,一般使用正则表达书判断sql语句是读操作,还是写操作,但是有个缺点,没有给用主动判断,比如写入操作必须去立即读取主数据库的,如果不能立即判 ...

  4. uploadify 报错集锦

    1.404 : 没有路由 检查 路由的大小写 或者 拼写 2.500: linux 没有读写权限

  5. Thinking in Java——笔记(5)

    Initialization & Cleanup Guaranteed initialization with the constructor In Java, the class desig ...

  6. Different Approaches for MVCC

    https://www.enterprisedb.com/well-known-databases-use-different-approaches-mvcc Well-known Databases ...

  7. XE5 ImageList的BUG?

    今天做界面, 在imagelist里加载一个带有半透明通道的PNG图, 结果发现图片居然发暗, 如下: 原图: IDE里加载以后的图: 明显变暗...查询了源码, 无果 然后又用2010去测试, 发现 ...

  8. IntelliJ IDEA全文搜索很给力

  9. Openstack搭建相关问题

    1.Openstack添加新磁盘到根分区 初始化分区sdb为物理卷pv pvcreate /dev/sdb  //初始化 pvdisplay  //显示物理卷信息 vgextend centos /d ...

  10. Elasticsearch + logstash中文指南

    http://kibana.logstash.es/content/logstash/examples/nginx-access.html http://es.xiaoleilu.com/030_Da ...