一、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. 20145337《Java程序设计》第四周学习总结

    20145337<Java程序设计>第四周学习总结 教材学习内容总结 继承与多态 继承 继承,避免多个类间重复定义共同行为 符合DRY(Don't Repeat Yourself)原则,多 ...

  2. Android课程---表格布局TableLayout

    特别注意:由于表格布局继承自线性布局,因此并不显示表格线 示例代码: <?xml version="1.0" encoding="utf-8"?> ...

  3. poj1061-青蛙的约会(扩展欧几里德算法)

    一,题意: 两个青蛙在赤道上跳跃,走环路.起始位置分别为x,y. 每次跳跃距离分别为m,n.赤道长度为L.两青蛙跳跃方向与次数相同的情况下, 问两青蛙是否有方法跳跃到同一点.输出最少跳跃次数.二,思路 ...

  4. venus java高并发框架

    http://www.iteye.com/topic/1118484 因为有 netty.mima等远程框架.包括spring jboss等remoting框架 和阿里的dubbo相比, 没有亮点.. ...

  5. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)

      1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...

  6. Windows2003中IIS的安全设置技巧

    在Windows Server 2003中对于IIS的安全设置具有十分重要的意义,所以掌握IIS安全设置的六大技巧是一个网管员必备的基本技能.下面就是对IIS的安全设置的六大技巧. 技巧1.安装系统补 ...

  7. Android Glide数据更新及内存缓存、硬盘缓存清理

    [转] 原文                                         Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...

  8. Tomcat热部署方法(3种)【转】

    热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效.但是对配置文件的修改除外! 1.直接把项目web文件夹放在webapps里. 2.在tomcat ...

  9. centos 6.7下 elasticsearch的安装

    1.下载elasticsearch的安装包,用ftp上传到linux系统下目录中,如在当前用户root的目录下新建目录elasticsearch,放入安装包 不要忘了添加执行权限 chmod +x * ...

  10. Java中的集合框架

    概念与作用 集合概念 现实生活中:很多事物凑在一起 数学中的集合:具有共同属性的事物的总体 java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 在编程时,常常需要集中存放多 ...